home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / prodpack.zip / DB4PPSAM.EXE / BDCOPT.PRG < prev    next >
Text File  |  1993-05-11  |  96KB  |  3,043 lines

  1. *-- DBW - Dialog Box Workshop - BDCOPT.PRG
  2. PROCEDURE BDCOPT
  3. *----------------------------------------------------------------------------
  4. * NAME
  5. * DESCRIPTION
  6. *----------------------------------------------------------------------------
  7.   PRIVATE  cAlias, cWindow, lTalk, lSafety, cDialog, cHelpFile, cStartLib
  8.  
  9.   IF SET( "TALK" ) = "ON"
  10.     SET TALK OFF
  11.     lTalk = .T.
  12.   ELSE
  13.     lTalk = .F.
  14.   ENDIF
  15.  
  16.   lSafety = SET( "SAFETY" ) = "ON"
  17.   SET SAFETY OFF
  18.  
  19.   cWindow = WINDOW()
  20.   cAlias = ALIAS()
  21.  
  22.   *----------------------------------
  23.   *-- Setup the help system variables
  24.   *----------------------------------
  25.   lError = .F.
  26.   cHelpFile = "BDCDRIVE"
  27.   cDialog = "BDCOPT"
  28.   cDBBLib = "DBBLIB"
  29.  
  30.   *----------------------------------------------
  31.   *-- Setup the link to the DBB Procedure Library
  32.   *----------------------------------------------
  33.   ON ERROR lError = .T.
  34.   cStartLib = SET( "PROCEDURE" )
  35.   SET PROCEDURE TO ( cDBBLib )
  36.   IF lError
  37.     lError = .F.
  38.     SET PROCEDURE TO HOME() + cDBBLib
  39.     IF lError
  40.       *-- Display the error message in a windowed box
  41.       PRIVATE lc_anykey, lc_msg, lc_msglen, lc_win, ln_press, ln_width, ll_trap,;
  42.               ll_escape
  43.  
  44.       lc_anykey = [Press any key to continue...]
  45.       ln_press  = LEN( lc_anykey )
  46.       lc_msg    = [Could not locate procedure file: ] + cDBBLib
  47.       ln_msglen = LEN( lc_msg )
  48.       ln_width = 0
  49.       ll_escape = SET("ESCAPE") = "ON"
  50.       SET ESCAPE OFF
  51.  
  52.       *-- Determine the width needed for the window:
  53.       IF ln_msglen <= ln_press
  54.         ln_width = ln_press
  55.       ELSE
  56.         *-- Make sure the message fits in the window:
  57.         IF ln_msglen > 76
  58.           lc_msg = LEFT( lc_msg, 76 )
  59.           ln_msglen = 76
  60.         ENDIF
  61.         ln_width = ln_msglen
  62.       ENDIF
  63.       DEFINE WINDOW _err_box FROM 9, ((76 - ln_width) + .5) / 2 ;
  64.                     TO 15, (ln_width + 83) / 2 DOUBLE
  65.       ln_width = ( ln_width + 2 )
  66.  
  67.       *-- Display the message and prompt to the window and wait for a key press
  68.       ACTIVATE WINDOW _err_box
  69.       ? lc_msg AT ( ln_width - ln_msglen ) / 2
  70.       ?
  71.       ? lc_anykey AT ( ln_width - ln_press ) / 2
  72.       SET CONSOLE OFF
  73.       WAIT
  74.       SET CONSOLE ON
  75.  
  76.       *-- Clean up the window display and reactivate the previous window
  77.       RELEASE WINDOW _err_box
  78.  
  79.       IF ll_escape
  80.         SET ESCAPE ON
  81.       ELSE
  82.         SET ESCAPE OFF
  83.       ENDIF
  84.  
  85.     ENDIF
  86.   ENDIF
  87.   ON ERROR
  88.  
  89.   *---------------------------------
  90.   *-- Run the actual dialog box code
  91.   *---------------------------------
  92.   IF .NOT. lError
  93.     DO Dialog
  94.   ENDIF
  95.  
  96.   *----------------------------------
  97.   *-- Restore the startup environment
  98.   *----------------------------------
  99.   IF .NOT. ISBLANK( cStartLib )
  100.     SET PROCEDURE TO ( cStartLib )
  101.   ENDIF
  102.  
  103.   IF .NOT. ISBLANK( cAlias ) .AND. SELECT( cAlias ) > 0
  104.     SELECT ( cAlias )
  105.   ENDIF
  106.  
  107.   IF lSafety
  108.     SET SAFETY ON
  109.   ENDIF
  110.   IF lTalk
  111.     SET TALK ON
  112.   ENDIF
  113.   IF .NOT. ISBLANK( cWindow )
  114.     ACTIVATE WINDOW &cWindow
  115.   ENDIF
  116. RETURN
  117. *-- EOP: BDCOPT
  118.  
  119.  
  120. PROCEDURE Dialog
  121. *----------------------------------------------------------------------------
  122. * NAME
  123. *   Dialog -
  124. *
  125. * DESCRIPTION
  126. *
  127. *----------------------------------------------------------------------------
  128.  
  129.   *---------------------------------------
  130.   *-- Temporary for now, message varaibles
  131.   *---------------------------------------
  132.   DLN_OK       = -500
  133.   DLN_CANCEL   = -501
  134.   DLN_HELP     = -502
  135.  
  136.   WM_PAINT    = 15                      && Notification to repaint client area
  137.   WM_CLOSE    = 16                      && Note that user selected close button
  138.   WM_DRAWITEM = 43                      && Notification to the owner of an
  139.  
  140.   BN_CLICKED  = 0
  141.   BN_PAINT    = 1
  142.   BN_HILITE   = 2
  143.   BN_UNHILITE = 3
  144.   BN_DISABLE  = 4
  145.   BN_DEFAULT  = 6
  146.   BN_PRESSED  = 7
  147.   BN_COLOR    = 8
  148.   SE_SHADOW   = -100
  149.  
  150.   EN_SETFOCU  = 1
  151.   EN_KILLFOC  = 2
  152.  
  153.   CB_SELECTS  = 13
  154.   CB_SHOWDRO  = 15
  155.   CB_HIDELST  = 25
  156.  
  157.   CBN_SELCHAN = 1
  158.   CBN_DBLCLK  = 2
  159.   CBN_SETFOCU = 3
  160.   CBN_KILLFOC = 4
  161.   CBN_EDITCHA = 5
  162.   CBN_EDITUPD = 6
  163.   CBN_DROPDOW = 7
  164.   CBN_INLIST  = 8
  165.  
  166.   LBN_SELCHA  =  1
  167.   LBN_DBLCLK  =  2
  168.   LBN_SELCAN  =  3
  169.   LBN_SETFOC  =  4
  170.   LBN_KILLFO  =  5
  171.  
  172.   KB_TAB = 9
  173.   KB_ENTER = 13
  174.   KB_SPACE = 32
  175.   KB_SHIFTTAB = -400
  176.   KB_UPARROW = 5
  177.   KB_DOWNARROW = 24
  178.   KB_LEFTARROW = 19
  179.   KB_RTARROW = 4
  180.   KB_F1 = 28
  181.   KB_ESC = 27
  182.   KB_MOUSE = -100
  183.   KB_CTRLW = 23
  184.  
  185.   *--------------------
  186.   *-- Working variables
  187.   *--------------------
  188.   PRIVATE nCurrent, nCurrGrp, lButtAct, nMRow, nMCol, nMsEvent, nDlgDef, nAccel
  189.   PRIVATE n1stGrp, nCancelBt
  190.   nCurrent  = 0                         && Current dialog object id
  191.   nCurrGrp  = 0                         && Current group id for object id
  192.   lButtAct  = .F.                       && Dialog has a button active
  193.   nMRow     = -1
  194.   nMCol     = -1
  195.   nMsEvent  = 0
  196.   nDlgDef   = 0
  197.   nAccel    = 0
  198.   n1stGrp   = 0
  199.   nCancelBt = 0                         && Id for cancel button
  200.  
  201.   PRIVATE nDefButt, nMess
  202.   nDefButt  = 0                         && Number of object with default button
  203.   nMess     = 0
  204.  
  205.   PRIVATE cOldFClr, cOldBClr, cOldHClr, cOldMClr, cOldNClr, cOldTClr
  206.   cOldFClr = _ColorChk( "F" )
  207.   cOldBClr = _ColorChk( "B" )
  208.   cOldHClr = _ColorChk( "H" )
  209.   cOldMClr = _ColorChk( "M" )
  210.   cOldNClr = _ColorChk( "N" )
  211.   cOldTClr = _ColorChk( "T" )
  212.  
  213.   SET COLOR OF FIELDS TO w+/b
  214.   SET COLOR OF BOX TO n/gb
  215.   SET COLOR OF HIGH TO w+/g
  216.   SET COLOR OF MESS TO n/gb
  217.   SET COLOR OF TITLE TO n/gb
  218.  
  219.   *------------------------
  220.   *-- Close Icon for window
  221.   *------------------------
  222.   PRIVATE nRowCls, nOrigRow, nOrigCol, nXoffset, nYOffset, nCol, ;
  223.           nHigh, nWidth, nLColCls, nRColCls, nRWinCol, cField, cClass, nScreen
  224.   cField = ""
  225.   cClass = ""
  226.  
  227.   nRowCls   = 1
  228.   nOrigRow  = 1
  229.   nOrigCol  = 8
  230.   nXOffset  = 0
  231.   nYOffset  = 0
  232.   nCol      = 8
  233.   nHigh     = 19
  234.   nWidth    = 63
  235.   nLColCls  = 10
  236.   nRColCls  = 12
  237.   nRWinCol  = 70
  238.   nScreen = IIF( "50" $ SET("DISPLAY"), 49, ;
  239.                 IIF( "43" $ SET("DISPLAY"), 42, 24 ) )
  240.   IF SET( "STATUS" ) = "ON"
  241.     nScreen = nScreen - 3
  242.   ENDIF
  243.  
  244.   PRIVATE nClkBox, nClkObj, aClkBox, aClkObj, aObjPoint
  245.   *--------------------------------------------------
  246.   *-- Get the number of clickable boxes in the dialog
  247.   *--------------------------------------------------
  248.   nClkBox = 0
  249.  
  250.   *--------------------------------------------------
  251.   *-- Get the number of clickable items in the dialog
  252.   *--------------------------------------------------
  253.   nClkObj = 14
  254.   DECLARE aClkObj[ 14 , 13 ]
  255.   aClkObj[ 1 , 1 ] = 4                  && Row
  256.   aClkObj[ 1 , 2 ] = 14                 && Col
  257.   aClkObj[ 1 , 3 ] = 30                 && Decimals
  258.   aClkObj[ 1 , 4 ] = 9                  && CurrentId
  259.   aClkObj[ 1 , 5 ] = 6                  && GroupId
  260.   aClkObj[ 1 , 6 ] = 11                 && NextId
  261.   aClkObj[ 1 , 7 ] = 51                 && PrevId
  262.   aClkObj[ 1 , 8 ] = " "                && PickKey
  263.   aClkObj[ 1 , 9 ] = 9                  && Previous item in group
  264.   aClkObj[ 1 ,10 ] = 9                  && Next item in group
  265.   aClkObj[ 1 ,11 ] = "CD_FILE_1"         && XXXXXXXXXXXXX [v]
  266.   aClkObj[ 1 ,12 ] = []
  267.   aClkObj[ 1 ,13 ] = []
  268.  
  269.   aClkObj[ 2 , 1 ] = 4                  && Row
  270.   aClkObj[ 2 , 2 ] = 38                 && Col
  271.   aClkObj[ 2 , 3 ] = 55                 && Decimals
  272.   aClkObj[ 2 , 4 ] = 11                 && CurrentId
  273.   aClkObj[ 2 , 5 ] = 11                 && GroupId
  274.   aClkObj[ 2 , 6 ] = 20                 && NextId
  275.   aClkObj[ 2 , 7 ] = 9                  && PrevId
  276.   aClkObj[ 2 , 8 ] = "d"                && PickKey
  277.   aClkObj[ 2 , 9 ] = 11                 && Previous item in group
  278.   aClkObj[ 2 ,10 ] = 11                 && Next item in group
  279.   aClkObj[ 2 ,11 ] = "BT_EDITCF"         &&  E~dit config file
  280.   aClkObj[ 2 ,12 ] = []
  281.   aClkObj[ 2 ,13 ] = []
  282.  
  283.   aClkObj[ 3 , 1 ] = 7                  && Row
  284.   aClkObj[ 3 , 2 ] = 14                 && Col
  285.   aClkObj[ 3 , 3 ] = 27                 && Decimals
  286.   aClkObj[ 3 , 4 ] = 20                 && CurrentId
  287.   aClkObj[ 3 , 5 ] = 16                 && GroupId
  288.   aClkObj[ 3 , 6 ] = 24                 && NextId
  289.   aClkObj[ 3 , 7 ] = 11                 && PrevId
  290.   aClkObj[ 3 , 8 ] = "C"                && PickKey
  291.   aClkObj[ 3 , 9 ] = 24                 && Previous item in group
  292.   aClkObj[ 3 ,10 ] = 24                 && Next item in group
  293.   aClkObj[ 3 ,11 ] = "RB_MODE_1"         && ( ) ~Compact
  294.   aClkObj[ 3 ,12 ] = []
  295.   aClkObj[ 3 ,13 ] = []
  296.  
  297.   aClkObj[ 4 , 1 ] = 8                  && Row
  298.   aClkObj[ 4 , 2 ] = 14                 && Col
  299.   aClkObj[ 4 , 3 ] = 27                 && Decimals
  300.   aClkObj[ 4 , 4 ] = 24                 && CurrentId
  301.   aClkObj[ 4 , 5 ] = 16                 && GroupId
  302.   aClkObj[ 4 , 6 ] = 21                 && NextId
  303.   aClkObj[ 4 , 7 ] = 20                 && PrevId
  304.   aClkObj[ 4 , 8 ] = "S"                && PickKey
  305.   aClkObj[ 4 , 9 ] = 20                 && Previous item in group
  306.   aClkObj[ 4 ,10 ] = 20                 && Next item in group
  307.   aClkObj[ 4 ,11 ] = "RB_MODE_2"         && ( ) ~Standalone
  308.   aClkObj[ 4 ,12 ] = []
  309.   aClkObj[ 4 ,13 ] = []
  310.  
  311.   aClkObj[ 5 , 1 ] = 7                  && Row
  312.   aClkObj[ 5 , 2 ] = 38                 && Col
  313.   aClkObj[ 5 , 3 ] = 63                 && Decimals
  314.   aClkObj[ 5 , 4 ] = 21                 && CurrentId
  315.   aClkObj[ 5 , 5 ] = 17                 && GroupId
  316.   aClkObj[ 5 , 6 ] = 25                 && NextId
  317.   aClkObj[ 5 , 7 ] = 24                 && PrevId
  318.   aClkObj[ 5 , 8 ] = "o"                && PickKey
  319.   aClkObj[ 5 , 9 ] = 31                 && Previous item in group
  320.   aClkObj[ 5 ,10 ] = 25                 && Next item in group
  321.   aClkObj[ 5 ,11 ] = "CK_OPTI_1"         && [ ] Compile ~only
  322.   aClkObj[ 5 ,12 ] = []
  323.   aClkObj[ 5 ,13 ] = []
  324.  
  325.   aClkObj[ 6 , 1 ] = 8                  && Row
  326.   aClkObj[ 6 , 2 ] = 38                 && Col
  327.   aClkObj[ 6 , 3 ] = 63                 && Decimals
  328.   aClkObj[ 6 , 4 ] = 25                 && CurrentId
  329.   aClkObj[ 6 , 5 ] = 17                 && GroupId
  330.   aClkObj[ 6 , 6 ] = 28                 && NextId
  331.   aClkObj[ 6 , 7 ] = 21                 && PrevId
  332.   aClkObj[ 6 , 8 ] = "p"                && PickKey
  333.   aClkObj[ 6 , 9 ] = 21                 && Previous item in group
  334.   aClkObj[ 6 ,10 ] = 28                 && Next item in group
  335.   aClkObj[ 6 ,11 ] = "CK_OPTI_2"         && [ ] Dis~play offending code
  336.   aClkObj[ 6 ,12 ] = []
  337.   aClkObj[ 6 ,13 ] = []
  338.  
  339.   aClkObj[ 7 , 1 ] = 9                  && Row
  340.   aClkObj[ 7 , 2 ] = 38                 && Col
  341.   aClkObj[ 7 , 3 ] = 63                 && Decimals
  342.   aClkObj[ 7 , 4 ] = 28                 && CurrentId
  343.   aClkObj[ 7 , 5 ] = 17                 && GroupId
  344.   aClkObj[ 7 , 6 ] = 31                 && NextId
  345.   aClkObj[ 7 , 7 ] = 25                 && PrevId
  346.   aClkObj[ 7 , 8 ] = "N"                && PickKey
  347.   aClkObj[ 7 , 9 ] = 25                 && Previous item in group
  348.   aClkObj[ 7 ,10 ] = 31                 && Next item in group
  349.   aClkObj[ 7 ,11 ] = "CK_OPTI_3"         && [ ] ~No warning messages
  350.   aClkObj[ 7 ,12 ] = []
  351.   aClkObj[ 7 ,13 ] = []
  352.  
  353.   aClkObj[ 8 , 1 ] = 10                 && Row
  354.   aClkObj[ 8 , 2 ] = 38                 && Col
  355.   aClkObj[ 8 , 3 ] = 63                 && Decimals
  356.   aClkObj[ 8 , 4 ] = 31                 && CurrentId
  357.   aClkObj[ 8 , 5 ] = 17                 && GroupId
  358.   aClkObj[ 8 , 6 ] = 37                 && NextId
  359.   aClkObj[ 8 , 7 ] = 28                 && PrevId
  360.   aClkObj[ 8 , 8 ] = "T"                && PickKey
  361.   aClkObj[ 8 , 9 ] = 28                 && Previous item in group
  362.   aClkObj[ 8 ,10 ] = 21                 && Next item in group
  363.   aClkObj[ 8 ,11 ] = "CK_OPTI_4"         && [ ] Set Lang~Tables on
  364.   aClkObj[ 8 ,12 ] = []
  365.   aClkObj[ 8 ,13 ] = []
  366.  
  367.   aClkObj[ 9 , 1 ] = 12                 && Row
  368.   aClkObj[ 9 , 2 ] = 14                 && Col
  369.   aClkObj[ 9 , 3 ] = 30                 && Decimals
  370.   aClkObj[ 9 , 4 ] = 37                 && CurrentId
  371.   aClkObj[ 9 , 5 ] = 34                 && GroupId
  372.   aClkObj[ 9 , 6 ] = 39                 && NextId
  373.   aClkObj[ 9 , 7 ] = 31                 && PrevId
  374.   aClkObj[ 9 , 8 ] = " "                && PickKey
  375.   aClkObj[ 9 , 9 ] = 37                 && Previous item in group
  376.   aClkObj[ 9 ,10 ] = 37                 && Next item in group
  377.   aClkObj[ 9 ,11 ] = "CD_LIST_1"         && XXXXXXXXXXXXX [v]
  378.   aClkObj[ 9 ,12 ] = []
  379.   aClkObj[ 9 ,13 ] = []
  380.  
  381.   aClkObj[ 10 , 1 ] = 12                && Row
  382.   aClkObj[ 10 , 2 ] = 38                && Col
  383.   aClkObj[ 10 , 3 ] = 53                && Decimals
  384.   aClkObj[ 10 , 4 ] = 39                && CurrentId
  385.   aClkObj[ 10 , 5 ] = 39                && GroupId
  386.   aClkObj[ 10 , 6 ] = 48                && NextId
  387.   aClkObj[ 10 , 7 ] = 37                && PrevId
  388.   aClkObj[ 10 , 8 ] = "E"               && PickKey
  389.   aClkObj[ 10 , 9 ] = 39                && Previous item in group
  390.   aClkObj[ 10 ,10 ] = 39                && Next item in group
  391.   aClkObj[ 10 ,11 ] = "BT_EDIT"          &&  ~Edit file list
  392.   aClkObj[ 10 ,12 ] = []
  393.   aClkObj[ 10 ,13 ] = []
  394.  
  395.   aClkObj[ 11 , 1 ] = 16                && Row
  396.   aClkObj[ 11 , 2 ] = 12                && Col
  397.   aClkObj[ 11 , 3 ] = 19                && Decimals
  398.   aClkObj[ 11 , 4 ] = 48                && CurrentId
  399.   aClkObj[ 11 , 5 ] = 48                && GroupId
  400.   aClkObj[ 11 , 6 ] = 49                && NextId
  401.   aClkObj[ 11 , 7 ] = 39                && PrevId
  402.   aClkObj[ 11 , 8 ] = " "               && PickKey
  403.   aClkObj[ 11 , 9 ] = 48                && Previous item in group
  404.   aClkObj[ 11 ,10 ] = 48                && Next item in group
  405.   aClkObj[ 11 ,11 ] = "BT_OK"            &&    Ok
  406.   aClkObj[ 11 ,12 ] = []
  407.   aClkObj[ 11 ,13 ] = []
  408.  
  409.   aClkObj[ 12 , 1 ] = 16                && Row
  410.   aClkObj[ 12 , 2 ] = 24                && Col
  411.   aClkObj[ 12 , 3 ] = 31                && Decimals
  412.   aClkObj[ 12 , 4 ] = 49                && CurrentId
  413.   aClkObj[ 12 , 5 ] = 49                && GroupId
  414.   aClkObj[ 12 , 6 ] = 50                && NextId
  415.   aClkObj[ 12 , 7 ] = 48                && PrevId
  416.   aClkObj[ 12 , 8 ] = " "               && PickKey
  417.   aClkObj[ 12 , 9 ] = 49                && Previous item in group
  418.   aClkObj[ 12 ,10 ] = 49                && Next item in group
  419.   aClkObj[ 12 ,11 ] = "BT_CANCEL"        &&  Cancel
  420.   aClkObj[ 12 ,12 ] = []
  421.   aClkObj[ 12 ,13 ] = []
  422.  
  423.   nCancelBt = 49
  424.  
  425.   aClkObj[ 13 , 1 ] = 16                && Row
  426.   aClkObj[ 13 , 2 ] = 36                && Col
  427.   aClkObj[ 13 , 3 ] = 43                && Decimals
  428.   aClkObj[ 13 , 4 ] = 50                && CurrentId
  429.   aClkObj[ 13 , 5 ] = 50                && GroupId
  430.   aClkObj[ 13 , 6 ] = 51                && NextId
  431.   aClkObj[ 13 , 7 ] = 49                && PrevId
  432.   aClkObj[ 13 , 8 ] = " "               && PickKey
  433.   aClkObj[ 13 , 9 ] = 50                && Previous item in group
  434.   aClkObj[ 13 ,10 ] = 50                && Next item in group
  435.   aClkObj[ 13 ,11 ] = "BT_HELP"          &&   Help
  436.   aClkObj[ 13 ,12 ] = []
  437.   aClkObj[ 13 ,13 ] = []
  438.  
  439.   aClkObj[ 14 , 1 ] = 16                && Row
  440.   aClkObj[ 14 , 2 ] = 48                && Col
  441.   aClkObj[ 14 , 3 ] = 65                && Decimals
  442.   aClkObj[ 14 , 4 ] = 51                && CurrentId
  443.   aClkObj[ 14 , 5 ] = 51                && GroupId
  444.   aClkObj[ 14 , 6 ] = 9                 && NextId
  445.   aClkObj[ 14 , 7 ] = 50                && PrevId
  446.   aClkObj[ 14 , 8 ] = "L"               && PickKey
  447.   aClkObj[ 14 , 9 ] = 51                && Previous item in group
  448.   aClkObj[ 14 ,10 ] = 51                && Next item in group
  449.   aClkObj[ 14 ,11 ] = "BT_LINK"          &&  ~Link options ...
  450.   aClkObj[ 14 ,12 ] = []
  451.   aClkObj[ 14 ,13 ] = []
  452.  
  453.  
  454.   *-------------------------------------------------------------
  455.   *-- Setup object pointers in to the current object array above
  456.   *-------------------------------------------------------------
  457.   DECLARE aObjPoint[ 56 ]
  458.   aObjPoint[ 9 ] = 1
  459.   aObjPoint[ 11 ] = 2
  460.   aObjPoint[ 20 ] = 3
  461.   aObjPoint[ 24 ] = 4
  462.   aObjPoint[ 21 ] = 5
  463.   aObjPoint[ 25 ] = 6
  464.   aObjPoint[ 28 ] = 7
  465.   aObjPoint[ 31 ] = 8
  466.   aObjPoint[ 37 ] = 9
  467.   aObjPoint[ 39 ] = 10
  468.   aObjPoint[ 48 ] = 11
  469.   aObjPoint[ 49 ] = 12
  470.   aObjPoint[ 50 ] = 13
  471.   aObjPoint[ 51 ] = 14
  472.  
  473.   *-------------------------------------------------------------------
  474.   *-- Setup private memory variables for object states (from InitObjs)
  475.   *-- First variable with the object memvar name contains the value
  476.   *-- for the object.  The second varaible, if present, indicates
  477.   *-- the id of the object previously active in the group.
  478.   *-------------------------------------------------------------------
  479.   PRIVATE cd_file_1
  480.   cd_file_1   = ""
  481.   PRIVATE nCd_file
  482.   nCd_file = 0
  483.   PRIVATE bt_editcf
  484.   bt_editcf   = ""
  485.   PRIVATE rb_mode_1
  486.   rb_mode_1   = ""
  487.   PRIVATE nRb_mode
  488.   nRb_mode = 20
  489.   PRIVATE rb_mode_2
  490.   rb_mode_2   = ""
  491.   PRIVATE ck_opti_1
  492.   ck_opti_1   = ""
  493.   PRIVATE nCk_opti
  494.   nCk_opti = 21
  495.   PRIVATE ck_opti_2
  496.   ck_opti_2   = ""
  497.   PRIVATE ck_opti_3
  498.   ck_opti_3   = ""
  499.   PRIVATE ck_opti_4
  500.   ck_opti_4   = ""
  501.   PRIVATE cd_list_1
  502.   cd_list_1   = ""
  503.   PRIVATE nCd_list
  504.   nCd_list = 0
  505.   PRIVATE bt_edit
  506.   bt_edit     = ""
  507.   PRIVATE bt_ok
  508.   bt_ok       = ""
  509.   PRIVATE bt_cancel
  510.   bt_cancel   = ""
  511.   PRIVATE bt_help
  512.   bt_help     = ""
  513.   PRIVATE bt_link
  514.   bt_link     = ""
  515.  
  516.   DO InitObjs
  517.  
  518.   DO DrawDial                           && Draw all the dialog objects
  519.  
  520.   *--------------------------------
  521.   *-- Set focus to the first object
  522.   *--------------------------------
  523.   DO GetNext WITH nCurrent, .T.
  524.  
  525.   *-- The message loop
  526.   nMess = 0
  527.   DO WHILE .NOT. GetMess()
  528.     DO Dispatch
  529.     IF nMess = DLN_OK .OR. nMess = DLN_CANCEL
  530.       EXIT
  531.     ENDIF
  532.  
  533.   ENDDO
  534.  
  535.   IF nMess = DLN_OK
  536.     DO PostVals
  537.     FXL_Cancel = .F.
  538.   ELSE
  539.     FXL_Cancel = .T.
  540.   ENDIF
  541.  
  542.   RELEASE WINDOW BDCOPT
  543.   RESTORE SCREEN FROM BDCOPT
  544.   RELEASE SCREEN BDCOPT
  545.  
  546.   DO ReleObjs
  547.  
  548.   SET COLOR OF FIELDS TO &cOldFClr
  549.   SET COLOR OF BOX TO &cOldBClr
  550.   SET COLOR OF HIGH TO &cOldHClr
  551.   SET COLOR OF MESS TO &cOldMClr
  552.   SET COLOR OF TITLE TO &cOldTClr
  553.   SET CURSOR ON
  554.  
  555. RETURN
  556. *-- EOP: Dialog
  557.  
  558. PROCEDURE InitObjs
  559. *----------------------------------------------------------------------------
  560. * NAME
  561. *   InitObjs - Scan the design DBF file and initialize the object variables
  562. *
  563. * DESCRIPTION
  564. *
  565. *----------------------------------------------------------------------------
  566.   PRIVATE cField, cClass, cDefault, Value, lInitDef
  567.  
  568.   *--------------------------------------------------
  569.   *-- Determine if an initialization array is present
  570.   *--------------------------------------------------
  571.   lInitDef = TYPE( "BDCOPT[1]" ) <> "U"
  572.  
  573.   *-------------------------------
  574.   *-- Set the default button value
  575.   *-------------------------------
  576.   nDlgDef =  48
  577.  
  578.   *-----------------------------------------------------------------
  579.   *-- If the Initialize array is present, then set the object values
  580.   *-- based on the array.
  581.   *-----------------------------------------------------------------
  582.   IF lInitDef
  583.     CD_FILE_1 = BDCOPT[ 1 ]
  584.     BT_EDITCF = BDCOPT[ 2 ]
  585.     IF BDCOPT[ 3 ]                      && If this button is active
  586.       nRB_MODE = 20                     && Set the tab into value to this button
  587.     ENDIF
  588.     RB_MODE_1 = BDCOPT[ 3 ]
  589.     IF BDCOPT[ 4 ]                      && If this button is active
  590.       nRB_MODE = 24                     && Set the tab into value to this button
  591.     ENDIF
  592.     RB_MODE_2 = BDCOPT[ 4 ]
  593.     CK_OPTI_1 = BDCOPT[ 5 ]
  594.     CK_OPTI_2 = BDCOPT[ 6 ]
  595.     CK_OPTI_3 = BDCOPT[ 7 ]
  596.     CK_OPTI_4 = BDCOPT[ 8 ]
  597.     CD_LIST_1 = BDCOPT[ 9 ]
  598.     BT_EDIT = BDCOPT[ 10 ]
  599.     BT_OK = BDCOPT[ 11 ]
  600.     BT_CANCEL = BDCOPT[ 12 ]
  601.     BT_HELP = BDCOPT[ 13 ]
  602.     BT_LINK = BDCOPT[ 14 ]
  603.   ELSE
  604.     *--------------------------------------------------------
  605.     *-- Otherwise, use the values stored in the resource file
  606.     *--------------------------------------------------------
  607.     CD_FILE_1 = "*.CFG                                                                           "
  608.     BT_EDITCF = .F.
  609.     RB_MODE_1 = .T.
  610.     nRB_MODE = 20                       && Store the group default value
  611.     RB_MODE_2 = .F.
  612.     CK_OPTI_1 = .F.
  613.     CK_OPTI_2 = .T.
  614.     nCK_OPTI = 25                       && Store the group default value
  615.     CK_OPTI_3 = .T.
  616.     nCK_OPTI = 28                       && Store the group default value
  617.     CK_OPTI_4 = .F.
  618.     CD_LIST_1 = "*.PRG                                                                           "
  619.     BT_EDIT = .F.
  620.     BT_OK = .T.
  621.     BT_CANCEL = .F.
  622.     BT_HELP = .F.
  623.     BT_LINK = .F.
  624.   ENDIF
  625.   nCurrent  = 9                         && Current dialog object id
  626.   nCurrGrp  = 6                         && Current group id for object id
  627.   n1stGrp   = 6
  628.  
  629. RETURN
  630. *-- EOP: InitObjs
  631.  
  632. PROCEDURE DrawDial
  633. *----------------------------------------------------------------------------
  634. * NAME
  635. *   DrawDial -
  636. *
  637. * DESCRIPTION
  638. *
  639. *----------------------------------------------------------------------------
  640.   PRIVATE lInitDef
  641.   lInitDef = TYPE( "BDCOPT[1]" ) <> "U"
  642.   IF FILE( "BDCOPT.WIN" ) .AND. ( .NOT. lInitDef .OR. ;
  643.      ( TYPE( "FXL_NoChng" ) = "L" .AND. FXL_NoChng ) )
  644.     *--------------------
  645.     *-- Dialog box shadow
  646.     *--------------------
  647.     SAVE SCREEN TO BDCOPT
  648.     ACTIVATE SCREEN
  649.     @ 2, 9 FILL TO 20, 71
  650.  
  651.     RESTORE WINDOW BDCOPT FROM BDCOPT
  652.     ACTIVATE WINDOW BDCOPT
  653.     DO TCombo WITH WM_PAINT, CB_HIDELST, 9
  654.     DO TCombo WITH WM_PAINT, CB_HIDELST, 37
  655.   ELSE
  656.     *-------------------------
  657.     *-- Draw the dialog window
  658.     *-------------------------
  659.     *--------------------
  660.     *-- Dialog box shadow
  661.     *--------------------
  662.     SAVE SCREEN TO BDCOPT
  663.     ACTIVATE SCREEN
  664.     @ 2, 9 FILL TO 20, 71
  665.  
  666.     DEFINE WINDOW BDCOPT FROM  1, 8 TO 19,70 NONE COLOR n/w
  667.     ACTIVATE WINDOW BDCOPT
  668.     @ 0, 0 TO 18 , 62 DOUBLE COLOR w+/w
  669.     *------------------------
  670.     *-- Close Icon for window
  671.     *------------------------
  672.     @ 0, 2 SAY "[ ]" COLOR w+/w
  673.     @ 0, 3 SAY CHR( 254 ) COLOR g+/w
  674.  
  675.     *---------------------------------
  676.     *-- Draw the other control objects
  677.     *---------------------------------
  678.     @ 0,21 SAY "[  Compiler Options  ]" COLOR w+/w
  679.     @ 1,4 SAY "┌─────────────────────────────────────────────────────" COLOR n/w
  680.     @ 1,58 SAY "┐" COLOR w+/w
  681.     @ 2,4 SAY "│" COLOR n/w
  682.     @ 2,58 SAY "│" COLOR w+/w
  683.     @ 3,4 SAY "│" COLOR n/w
  684.     @ 3,58 SAY "│" COLOR w+/w
  685.     @ 4,4 SAY "│" COLOR n/w
  686.     @ 4,58 SAY "│" COLOR w+/w
  687.     @ 5,4 SAY "│" COLOR n/w
  688.     @ 5,58 SAY "│" COLOR w+/w
  689.     @ 6,4 SAY "│" COLOR n/w
  690.     @ 6,58 SAY "│" COLOR w+/w
  691.     @ 7,4 SAY "│" COLOR n/w
  692.     @ 7,58 SAY "│" COLOR w+/w
  693.     @ 8,4 SAY "│" COLOR n/w
  694.     @ 8,58 SAY "│" COLOR w+/w
  695.     @ 9,4 SAY "│" COLOR n/w
  696.     @ 9,58 SAY "│" COLOR w+/w
  697.     @ 10,4 SAY "│" COLOR n/w
  698.     @ 10,58 SAY "│" COLOR w+/w
  699.     @ 11,4 SAY "│" COLOR n/w
  700.     @ 11,58 SAY "│" COLOR w+/w
  701.     @ 12,4 SAY "│" COLOR n/w
  702.     @ 12,58 SAY "│" COLOR w+/w
  703.     @ 13,4 SAY "└" COLOR n/w
  704.     @ 13,5 SAY "─────────────────────────────────────────────────────┘" COLOR w+/w
  705.     @ 14,2 SAY "┌─────────────────────────────────────────────────────────" COLOR w+/w
  706.     @ 14,60 SAY "┐" COLOR n/w
  707.     @ 15,2 SAY "│" COLOR w+/w
  708.     @ 15,60 SAY "│" COLOR n/w
  709.     @ 16,2 SAY "│" COLOR w+/w
  710.     @ 16,60 SAY "│" COLOR n/w
  711.     @ 17,2 SAY "└" COLOR w+/w
  712.     @ 17,3 SAY "─────────────────────────────────────────────────────────┘" COLOR n/w
  713.     DO TStatic WITH WM_PAINT, BN_PAINT, 6
  714.     DO TCombo WITH WM_PAINT, CB_HIDELST, 9
  715.     DO TButton WITH WM_PAINT, BN_PAINT, 11
  716.     DO TButton WITH WM_PAINT, SE_SHADOW, 11
  717.     DO TStatic WITH WM_PAINT, BN_PAINT, 16
  718.     DO TButton WITH WM_PAINT, BN_PAINT, 20
  719.     DO TButton WITH WM_PAINT, BN_PAINT, 24
  720.     DO TStatic WITH WM_PAINT, BN_PAINT, 17
  721.     DO TButton WITH WM_PAINT, BN_PAINT, 21
  722.     DO TButton WITH WM_PAINT, BN_PAINT, 25
  723.     DO TButton WITH WM_PAINT, BN_PAINT, 28
  724.     DO TButton WITH WM_PAINT, BN_PAINT, 31
  725.     DO TStatic WITH WM_PAINT, BN_PAINT, 34
  726.     DO TCombo WITH WM_PAINT, CB_HIDELST, 37
  727.     DO TButton WITH WM_PAINT, BN_PAINT, 39
  728.     DO TButton WITH WM_PAINT, SE_SHADOW, 39
  729.     DO TButton WITH WM_PAINT, BN_PAINT, 48
  730.     DO TButton WITH WM_PAINT, SE_SHADOW, 48
  731.     DO TButton WITH WM_PAINT, BN_PAINT, 49
  732.     DO TButton WITH WM_PAINT, SE_SHADOW, 49
  733.     DO TButton WITH WM_PAINT, BN_PAINT, 50
  734.     DO TButton WITH WM_PAINT, SE_SHADOW, 50
  735.     DO TButton WITH WM_PAINT, BN_PAINT, 51
  736.     DO TButton WITH WM_PAINT, SE_SHADOW, 51
  737.     IF .NOT. lInitDef
  738.       SAVE WINDOW BDCOPT TO BDCOPT
  739.     ENDIF
  740.   ENDIF
  741. RETURN
  742. *-- EOP: DrawDial
  743.  
  744.  
  745.  
  746. PROCEDURE TStatic
  747. PARAMETERS pn_msg, pc_data, pnObject
  748. *----------------------------------------------------------------------------
  749. * NAME
  750. *   TStatic -
  751. *
  752. * DESCRIPTION
  753. *
  754. * PARAMETERS
  755. *   pn_msg     =
  756. *   pc_data    =
  757. *   pnObject   =
  758. *
  759. *----------------------------------------------------------------------------
  760.   DO CASE
  761.     CASE pnObject = 6
  762.       DO CASE
  763.         CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  764.           @ 2, 6 SAY 'CFG file name' COLOR n/w
  765.         CASE pc_data = BN_HILITE
  766.           @ 2, 6 SAY 'CFG file name' COLOR w+/w
  767.         CASE pc_data = BN_DISABLE
  768.           @ 2, 6 SAY 'CFG file name' COLOR n+/w
  769.         CASE pc_data = BN_COLOR
  770.           @ 2, 6 SAY "CF~G file name" COLOR n/w
  771.       ENDCASE
  772.       IF pc_data <> BN_DISABLE
  773.         @ 2, 8 SAY "G" COLOR gr+/w
  774.       ENDIF
  775.     CASE pnObject = 16
  776.       DO CASE
  777.         CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  778.           @ 5, 6 SAY "Model" COLOR n/w
  779.         CASE pc_data = BN_HILITE
  780.           @ 5, 6 SAY "Model" COLOR w+/w
  781.         CASE pc_data = BN_DISABLE
  782.           @ 5, 6 SAY "Model" COLOR n+/w
  783.         CASE pc_data = BN_COLOR
  784.           @ 5, 6 SAY "Model" COLOR n/w
  785.       ENDCASE
  786.     CASE pnObject = 17
  787.       DO CASE
  788.         CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  789.           @ 5, 30 SAY "Compile Options" COLOR n/w
  790.         CASE pc_data = BN_HILITE
  791.           @ 5, 30 SAY "Compile Options" COLOR w+/w
  792.         CASE pc_data = BN_DISABLE
  793.           @ 5, 30 SAY "Compile Options" COLOR n+/w
  794.         CASE pc_data = BN_COLOR
  795.           @ 5, 30 SAY "Compile Options" COLOR n/w
  796.       ENDCASE
  797.     CASE pnObject = 34
  798.       DO CASE
  799.         CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  800.           @ 10, 6 SAY 'File list name' COLOR n/w
  801.         CASE pc_data = BN_HILITE
  802.           @ 10, 6 SAY 'File list name' COLOR w+/w
  803.         CASE pc_data = BN_DISABLE
  804.           @ 10, 6 SAY 'File list name' COLOR n+/w
  805.         CASE pc_data = BN_COLOR
  806.           @ 10, 6 SAY "~File list name" COLOR n/w
  807.       ENDCASE
  808.       IF pc_data <> BN_DISABLE
  809.         @ 10, 6 SAY "F" COLOR gr+/w
  810.       ENDIF
  811.   ENDCASE
  812.  
  813. RETURN
  814. *-- EOP: TStatic WITH pn_msg, pc_data, pnObject
  815.  
  816. PROCEDURE HasTitle
  817. PARAMETERS pnObject, pnWay
  818. *----------------------------------------------------------------------------
  819. * NAME
  820. *   HasTitle - Display the label for the group of objects
  821. *
  822. * DESCRIPTION
  823. *
  824. * PARAMETERS
  825. *   pnObject   = nCurrent value for group item
  826. *   pnWay      = BN_HILITE, BN_UNHILITE, or BN_DISABLE
  827. *
  828. *----------------------------------------------------------------------------
  829.   DO CASE
  830.     CASE pnObject = 9
  831.       DO TStatic WITH WM_PAINT, pnWay, 6
  832.     CASE pnObject = 20
  833.       DO TStatic WITH WM_PAINT, pnWay, 16
  834.     CASE pnObject = 24
  835.       DO TStatic WITH WM_PAINT, pnWay, 16
  836.     CASE pnObject = 21
  837.       DO TStatic WITH WM_PAINT, pnWay, 17
  838.     CASE pnObject = 25
  839.       DO TStatic WITH WM_PAINT, pnWay, 17
  840.     CASE pnObject = 28
  841.       DO TStatic WITH WM_PAINT, pnWay, 17
  842.     CASE pnObject = 31
  843.       DO TStatic WITH WM_PAINT, pnWay, 17
  844.     CASE pnObject = 37
  845.       DO TStatic WITH WM_PAINT, pnWay, 34
  846.  
  847.   ENDCASE
  848.  
  849. *-- EOP: HasTitle WITH pnObject, pnWay
  850.  
  851.  
  852.  
  853. FUNCTION GetMess
  854. *----------------------------------------------------------------------------
  855. * NAME
  856. *   GetMess() -
  857. * DEPENDENCIES
  858. *   Uses nCurrent to determine the wait state for the given object.
  859. *----------------------------------------------------------------------------
  860.   PRIVATE lRtn
  861.  
  862.   DO CASE
  863.     CASE nCurrent = 9                   && CD_FILE_1
  864.       DO GetDD
  865.     CASE nCurrent = 11                  && BT_EDITCF
  866.       DO TButton WITH WM_PAINT, BN_UNHILITE, 48
  867.       BT_EDITCF = .F.
  868.       DO GetWait
  869.     CASE nCurrent = 20                  && RB_MODE_1
  870.       DO GetWait
  871.     CASE nCurrent = 24                  && RB_MODE_2
  872.       DO GetWait
  873.     CASE nCurrent = 21                  && CK_OPTI_1
  874.       DO GetWait
  875.     CASE nCurrent = 25                  && CK_OPTI_2
  876.       DO GetWait
  877.     CASE nCurrent = 28                  && CK_OPTI_3
  878.       DO GetWait
  879.     CASE nCurrent = 31                  && CK_OPTI_4
  880.       DO GetWait
  881.     CASE nCurrent = 37                  && CD_LIST_1
  882.       DO GetDD
  883.     CASE nCurrent = 39                  && BT_EDIT
  884.       DO TButton WITH WM_PAINT, BN_UNHILITE, 48
  885.       BT_EDIT = .F.
  886.       DO GetWait
  887.     CASE nCurrent = 48                  && BT_OK
  888.       DO GetWait
  889.     CASE nCurrent = 49                  && BT_CANCEL
  890.       DO TButton WITH WM_PAINT, BN_UNHILITE, 48
  891.       BT_CANCEL = .F.
  892.       DO GetWait
  893.     CASE nCurrent = 50                  && BT_HELP
  894.       DO TButton WITH WM_PAINT, BN_UNHILITE, 48
  895.       BT_HELP = .F.
  896.       DO GetWait
  897.     CASE nCurrent = 51                  && BT_LINK
  898.       DO TButton WITH WM_PAINT, BN_UNHILITE, 48
  899.       BT_LINK = .F.
  900.       DO GetWait
  901.   ENDCASE
  902.  
  903.   IF nMess = KB_F1
  904.     DO _HelpSys WITH cDialog, ;
  905.        LEFT( TRANSFORM( aObjPoint[ nCurrent ], "@L 99" ) + ;
  906.              aClkObj[ aObjPoint[ nCurrent ], 11 ], 10 ), ;
  907.        cHelpFile
  908.   ENDIF
  909.  
  910.   IF nMess = KB_ESC
  911.     lRtn = .T.
  912.   ELSE
  913.     lRtn = .F.
  914.   ENDIF
  915.  
  916. RETURN lRtn
  917. *-- EOF: GetMess(  )
  918.  
  919.  
  920. PROCEDURE GetWait
  921. *----------------------------------------------------------------------------
  922. * NAME
  923. *   GetWait -
  924. *
  925. * DESCRIPTION
  926. *
  927. *----------------------------------------------------------------------------
  928.   nMess = 0
  929.   nAccel = 0
  930.  
  931.   lButtAct = .T.
  932.   DO TButton WITH WM_PAINT, BN_HILITE, nCurrent
  933.  
  934.   SET CONSOLE OFF
  935.   SET CURSOR OFF
  936.   WAIT
  937.   SET CONSOLE ON
  938.  
  939.   nMess = LASTKEY()
  940.   nMRow = MROW()
  941.   nMCol = MCOL()
  942.  
  943. RETURN
  944. *-- EOP: GetWait
  945.  
  946.  
  947. PROCEDURE TButton
  948. PARAMETERS pn_msg, pc_data, pnObject
  949. *----------------------------------------------------------------------------
  950. * NAME
  951. *   TButton -
  952. *
  953. * DESCRIPTION
  954. *
  955. * PARAMETERS
  956. *   pn_msg     =
  957. *   pc_data    =
  958. *   pnObject   =
  959. *
  960. *----------------------------------------------------------------------------
  961.   DO CASE
  962.     CASE pnObject = 11                  && BT_EDITCF
  963.       DO CASE
  964.         CASE pn_msg = WM_PAINT
  965.           DO CASE
  966.             CASE pc_data = BN_PAINT
  967.               @ 3, 30 SAY ' Edit config file ' COLOR n/g
  968.             CASE pc_data = BN_HILITE
  969.               @ 3, 30 SAY ' Edit config file ' COLOR w+/g
  970.             CASE pc_data = BN_UNHILITE
  971.               @ 3, 30 SAY ' Edit config file ' COLOR n/g
  972.             CASE pc_data = BN_DEFAULT
  973.               @ 3, 30 SAY ' Edit config file ' COLOR bg+/g
  974.             CASE pc_data = BN_DISABLE
  975.               @ 3, 30 SAY ' Edit config file ' COLOR n+/g
  976.             CASE pc_data = SE_SHADOW
  977.               @ 4, 31 SAY "▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"
  978.               @ 3, 48 SAY "▄"
  979.             CASE pc_data = BN_PRESSED
  980.               @ 4, 31 SAY SPACE( 18 )
  981.               @ 3, 30 SAY " "
  982.               @ 3, 48 SAY " "
  983.               @ 3, 31 SAY ' Edit config file ' COLOR w+/g
  984.           ENDCASE
  985.           IF pc_data <> BN_PRESSED .AND. pc_data <> BN_DISABLE
  986.             @ 3, 32 SAY "d" COLOR gr+/g
  987.           ENDIF
  988.         CASE pn_msg = BN_CLICKED
  989.           DO TButton WITH WM_PAINT, BN_PRESSED, 11
  990.  
  991.           IF BDCEdit( [BT_EDITCF] )                                           
  992.           ENDIF
  993.  
  994.           DO TButton WITH WM_PAINT, BN_PAINT, 11
  995.           DO TButton WITH WM_PAINT, SE_SHADOW, 11
  996.       ENDCASE
  997.  
  998.     CASE pnObject = 20                  && RB_MODE_1
  999.       DO CASE
  1000.         CASE pn_msg = WM_PAINT
  1001.           DO CASE
  1002.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  1003.               @ 6, 6 SAY '( ) Compact   ' COLOR n/gb
  1004.               IF RB_MODE_1
  1005.                 @ 6, 7 TO 6, 7 7 COLOR n/gb
  1006.               ELSE
  1007.                 @ 6, 7 SAY " " COLOR n/gb
  1008.               ENDIF
  1009.             CASE pc_data = BN_HILITE
  1010.               @ 6, 6 SAY '( ) Compact   ' COLOR w+/gb
  1011.               IF RB_MODE_1
  1012.                 @ 6, 7 TO 6, 7 7 COLOR w+/gb
  1013.               ELSE
  1014.                 @ 6, 7 SAY " " COLOR w+/gb
  1015.               ENDIF
  1016.             CASE pc_data = BN_DISABLE
  1017.               @ 6, 6 SAY '( ) Compact   ' COLOR n+/gb
  1018.               IF RB_MODE_1
  1019.                 @ 6, 7 TO 6, 7 7 COLOR n+/gb
  1020.               ELSE
  1021.                 @ 6, 7 SAY " " COLOR n+/gb
  1022.               ENDIF
  1023.           ENDCASE
  1024.           IF pc_data <> BN_DISABLE
  1025.             @ 6, 10 SAY "C" COLOR gr+/gb
  1026.           ENDIF
  1027.         CASE pn_msg = BN_CLICKED
  1028.           IF RB_MODE_1
  1029.             STORE .F. TO RB_MODE_1
  1030.           ELSE
  1031.             STORE .T. TO RB_MODE_1
  1032.           ENDIF
  1033.  
  1034.       ENDCASE
  1035.     CASE pnObject = 24                  && RB_MODE_2
  1036.       DO CASE
  1037.         CASE pn_msg = WM_PAINT
  1038.           DO CASE
  1039.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  1040.               @ 7, 6 SAY '( ) Standalone' COLOR n/gb
  1041.               IF RB_MODE_2
  1042.                 @ 7, 7 TO 7, 7 7 COLOR n/gb
  1043.               ELSE
  1044.                 @ 7, 7 SAY " " COLOR n/gb
  1045.               ENDIF
  1046.             CASE pc_data = BN_HILITE
  1047.               @ 7, 6 SAY '( ) Standalone' COLOR w+/gb
  1048.               IF RB_MODE_2
  1049.                 @ 7, 7 TO 7, 7 7 COLOR w+/gb
  1050.               ELSE
  1051.                 @ 7, 7 SAY " " COLOR w+/gb
  1052.               ENDIF
  1053.             CASE pc_data = BN_DISABLE
  1054.               @ 7, 6 SAY '( ) Standalone' COLOR n+/gb
  1055.               IF RB_MODE_2
  1056.                 @ 7, 7 TO 7, 7 7 COLOR n+/gb
  1057.               ELSE
  1058.                 @ 7, 7 SAY " " COLOR n+/gb
  1059.               ENDIF
  1060.           ENDCASE
  1061.           IF pc_data <> BN_DISABLE
  1062.             @ 7, 10 SAY "S" COLOR gr+/gb
  1063.           ENDIF
  1064.         CASE pn_msg = BN_CLICKED
  1065.           IF RB_MODE_2
  1066.             STORE .F. TO RB_MODE_2
  1067.           ELSE
  1068.             STORE .T. TO RB_MODE_2
  1069.           ENDIF
  1070.  
  1071.       ENDCASE
  1072.     CASE pnObject = 21                  && CK_OPTI_1
  1073.       DO CASE
  1074.         CASE pn_msg = WM_PAINT
  1075.           DO CASE
  1076.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  1077.               @ 6, 30 SAY '[ ] Compile only          ' COLOR n/gb
  1078.               @ 6, 31 SAY IIF( CK_OPTI_1 , "X"," " ) COLOR n/gb
  1079.             CASE pc_data = BN_HILITE
  1080.               @ 6, 30 SAY '[ ] Compile only          ' COLOR w+/gb
  1081.               @ 6, 31 SAY IIF( CK_OPTI_1 , "X"," " ) COLOR w+/gb
  1082.             CASE pc_data = BN_DISABLE
  1083.               @ 6, 30 SAY '[ ] Compile only          ' COLOR n+/gb
  1084.               @ 6, 31 SAY IIF( CK_OPTI_1 , "X"," " ) COLOR n+/gb
  1085.           ENDCASE
  1086.           IF pc_data <> BN_DISABLE
  1087.             @ 6, 42 SAY "o" COLOR gr+/gb
  1088.           ENDIF
  1089.         CASE pn_msg = BN_CLICKED
  1090.           IF CK_OPTI_1
  1091.             STORE .F. TO CK_OPTI_1
  1092.           ELSE
  1093.             STORE .T. TO CK_OPTI_1
  1094.           ENDIF
  1095.  
  1096.           DO TButton WITH WM_PAINT, BN_HILITE, 21
  1097.       ENDCASE
  1098.     CASE pnObject = 25                  && CK_OPTI_2
  1099.       DO CASE
  1100.         CASE pn_msg = WM_PAINT
  1101.           DO CASE
  1102.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  1103.               @ 7, 30 SAY '[ ] Display offending code' COLOR n/gb
  1104.               @ 7, 31 SAY IIF( CK_OPTI_2 , "X"," " ) COLOR n/gb
  1105.             CASE pc_data = BN_HILITE
  1106.               @ 7, 30 SAY '[ ] Display offending code' COLOR w+/gb
  1107.               @ 7, 31 SAY IIF( CK_OPTI_2 , "X"," " ) COLOR w+/gb
  1108.             CASE pc_data = BN_DISABLE
  1109.               @ 7, 30 SAY '[ ] Display offending code' COLOR n+/gb
  1110.               @ 7, 31 SAY IIF( CK_OPTI_2 , "X"," " ) COLOR n+/gb
  1111.           ENDCASE
  1112.           IF pc_data <> BN_DISABLE
  1113.             @ 7, 37 SAY "p" COLOR gr+/gb
  1114.           ENDIF
  1115.         CASE pn_msg = BN_CLICKED
  1116.           IF CK_OPTI_2
  1117.             STORE .F. TO CK_OPTI_2
  1118.           ELSE
  1119.             STORE .T. TO CK_OPTI_2
  1120.           ENDIF
  1121.  
  1122.           DO TButton WITH WM_PAINT, BN_HILITE, 25
  1123.       ENDCASE
  1124.     CASE pnObject = 28                  && CK_OPTI_3
  1125.       DO CASE
  1126.         CASE pn_msg = WM_PAINT
  1127.           DO CASE
  1128.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  1129.               @ 8, 30 SAY '[ ] No warning messages   ' COLOR n/gb
  1130.               @ 8, 31 SAY IIF( CK_OPTI_3 , "X"," " ) COLOR n/gb
  1131.             CASE pc_data = BN_HILITE
  1132.               @ 8, 30 SAY '[ ] No warning messages   ' COLOR w+/gb
  1133.               @ 8, 31 SAY IIF( CK_OPTI_3 , "X"," " ) COLOR w+/gb
  1134.             CASE pc_data = BN_DISABLE
  1135.               @ 8, 30 SAY '[ ] No warning messages   ' COLOR n+/gb
  1136.               @ 8, 31 SAY IIF( CK_OPTI_3 , "X"," " ) COLOR n+/gb
  1137.           ENDCASE
  1138.           IF pc_data <> BN_DISABLE
  1139.             @ 8, 34 SAY "N" COLOR gr+/gb
  1140.           ENDIF
  1141.         CASE pn_msg = BN_CLICKED
  1142.           IF CK_OPTI_3
  1143.             STORE .F. TO CK_OPTI_3
  1144.           ELSE
  1145.             STORE .T. TO CK_OPTI_3
  1146.           ENDIF
  1147.  
  1148.           DO TButton WITH WM_PAINT, BN_HILITE, 28
  1149.       ENDCASE
  1150.     CASE pnObject = 31                  && CK_OPTI_4
  1151.       DO CASE
  1152.         CASE pn_msg = WM_PAINT
  1153.           DO CASE
  1154.             CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE
  1155.               @ 9, 30 SAY '[ ] Set LangTables on     ' COLOR n/gb
  1156.               @ 9, 31 SAY IIF( CK_OPTI_4 , "X"," " ) COLOR n/gb
  1157.             CASE pc_data = BN_HILITE
  1158.               @ 9, 30 SAY '[ ] Set LangTables on     ' COLOR w+/gb
  1159.               @ 9, 31 SAY IIF( CK_OPTI_4 , "X"," " ) COLOR w+/gb
  1160.             CASE pc_data = BN_DISABLE
  1161.               @ 9, 30 SAY '[ ] Set LangTables on     ' COLOR n+/gb
  1162.               @ 9, 31 SAY IIF( CK_OPTI_4 , "X"," " ) COLOR n+/gb
  1163.           ENDCASE
  1164.           IF pc_data <> BN_DISABLE
  1165.             @ 9, 42 SAY "T" COLOR gr+/gb
  1166.           ENDIF
  1167.         CASE pn_msg = BN_CLICKED
  1168.           IF CK_OPTI_4
  1169.             STORE .F. TO CK_OPTI_4
  1170.           ELSE
  1171.             STORE .T. TO CK_OPTI_4
  1172.           ENDIF
  1173.  
  1174.           DO TButton WITH WM_PAINT, BN_HILITE, 31
  1175.       ENDCASE
  1176.     CASE pnObject = 39                  && BT_EDIT
  1177.       DO CASE
  1178.         CASE pn_msg = WM_PAINT
  1179.           DO CASE
  1180.             CASE pc_data = BN_PAINT
  1181.               @ 11, 30 SAY ' Edit file list ' COLOR n/g
  1182.             CASE pc_data = BN_HILITE
  1183.               @ 11, 30 SAY ' Edit file list ' COLOR w+/g
  1184.             CASE pc_data = BN_UNHILITE
  1185.               @ 11, 30 SAY ' Edit file list ' COLOR n/g
  1186.             CASE pc_data = BN_DEFAULT
  1187.               @ 11, 30 SAY ' Edit file list ' COLOR bg+/g
  1188.             CASE pc_data = BN_DISABLE
  1189.               @ 11, 30 SAY ' Edit file list ' COLOR n+/g
  1190.             CASE pc_data = SE_SHADOW
  1191.               @ 12, 31 SAY "▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"
  1192.               @ 11, 46 SAY "▄"
  1193.             CASE pc_data = BN_PRESSED
  1194.               @ 12, 31 SAY SPACE( 16 )
  1195.               @ 11, 30 SAY " "
  1196.               @ 11, 46 SAY " "
  1197.               @ 11, 31 SAY ' Edit file list ' COLOR w+/g
  1198.           ENDCASE
  1199.           IF pc_data <> BN_PRESSED .AND. pc_data <> BN_DISABLE
  1200.             @ 11, 31 SAY "E" COLOR gr+/g
  1201.           ENDIF
  1202.         CASE pn_msg = BN_CLICKED
  1203.           DO TButton WITH WM_PAINT, BN_PRESSED, 39
  1204.  
  1205.           IF BDCEdit( [BT_EDIT] )                                             
  1206.           ENDIF
  1207.  
  1208.           DO TButton WITH WM_PAINT, BN_PAINT, 39
  1209.           DO TButton WITH WM_PAINT, SE_SHADOW, 39
  1210.       ENDCASE
  1211.  
  1212.     CASE pnObject = 48                  && BT_OK
  1213.       DO CASE
  1214.         CASE pn_msg = WM_PAINT
  1215.           DO CASE
  1216.             CASE pc_data = BN_PAINT
  1217.               @ 15, 4 SAY '   Ok   ' COLOR bg+/g
  1218.             CASE pc_data = BN_HILITE
  1219.               @ 15, 4 SAY '   Ok   ' COLOR w+/g
  1220.             CASE pc_data = BN_UNHILITE
  1221.               @ 15, 4 SAY '   Ok   ' COLOR n/g
  1222.             CASE pc_data = BN_DEFAULT
  1223.               @ 15, 4 SAY '   Ok   ' COLOR bg+/g
  1224.             CASE pc_data = BN_DISABLE
  1225.               @ 15, 4 SAY '   Ok   ' COLOR n+/g
  1226.             CASE pc_data = SE_SHADOW
  1227.               @ 16, 5 SAY "▀▀▀▀▀▀▀▀"
  1228.               @ 15, 12 SAY "▄"
  1229.             CASE pc_data = BN_PRESSED
  1230.               @ 16, 5 SAY SPACE( 8 )
  1231.               @ 15, 4 SAY " "
  1232.               @ 15, 12 SAY " "
  1233.               @ 15, 5 SAY '   Ok   ' COLOR w+/g
  1234.           ENDCASE
  1235.         CASE pn_msg = BN_CLICKED
  1236.           DO TButton WITH WM_PAINT, BN_PRESSED, 48
  1237.           IF BDCOk()
  1238.             nMess = DLN_OK
  1239.           ENDIF
  1240.           x = INKEY( .2 )
  1241.           DO TButton WITH WM_PAINT, BN_PAINT, 48
  1242.           DO TButton WITH WM_PAINT, SE_SHADOW, 48
  1243.       ENDCASE
  1244.  
  1245.     CASE pnObject = 49                  && BT_CANCEL
  1246.       DO CASE
  1247.         CASE pn_msg = WM_PAINT
  1248.           DO CASE
  1249.             CASE pc_data = BN_PAINT
  1250.               @ 15, 16 SAY ' Cancel ' COLOR n/g
  1251.             CASE pc_data = BN_HILITE
  1252.               @ 15, 16 SAY ' Cancel ' COLOR w+/g
  1253.             CASE pc_data = BN_UNHILITE
  1254.               @ 15, 16 SAY ' Cancel ' COLOR n/g
  1255.             CASE pc_data = BN_DEFAULT
  1256.               @ 15, 16 SAY ' Cancel ' COLOR bg+/g
  1257.             CASE pc_data = BN_DISABLE
  1258.               @ 15, 16 SAY ' Cancel ' COLOR n+/g
  1259.             CASE pc_data = SE_SHADOW
  1260.               @ 16, 17 SAY "▀▀▀▀▀▀▀▀"
  1261.               @ 15, 24 SAY "▄"
  1262.             CASE pc_data = BN_PRESSED
  1263.               @ 16, 17 SAY SPACE( 8 )
  1264.               @ 15, 16 SAY " "
  1265.               @ 15, 24 SAY " "
  1266.               @ 15, 17 SAY ' Cancel ' COLOR w+/g
  1267.           ENDCASE
  1268.         CASE pn_msg = BN_CLICKED
  1269.           DO TButton WITH WM_PAINT, BN_PRESSED, 49
  1270.           x = INKEY( .2 )
  1271.           nMess = DLN_CANCEL
  1272.           DO TButton WITH WM_PAINT, BN_PAINT, 49
  1273.           DO TButton WITH WM_PAINT, SE_SHADOW, 49
  1274.       ENDCASE
  1275.  
  1276.     CASE pnObject = 50                  && BT_HELP
  1277.       DO CASE
  1278.         CASE pn_msg = WM_PAINT
  1279.           DO CASE
  1280.             CASE pc_data = BN_PAINT
  1281.               @ 15, 28 SAY '  Help  ' COLOR n/g
  1282.             CASE pc_data = BN_HILITE
  1283.               @ 15, 28 SAY '  Help  ' COLOR w+/g
  1284.             CASE pc_data = BN_UNHILITE
  1285.               @ 15, 28 SAY '  Help  ' COLOR n/g
  1286.             CASE pc_data = BN_DEFAULT
  1287.               @ 15, 28 SAY '  Help  ' COLOR bg+/g
  1288.             CASE pc_data = BN_DISABLE
  1289.               @ 15, 28 SAY '  Help  ' COLOR n+/g
  1290.             CASE pc_data = SE_SHADOW
  1291.               @ 16, 29 SAY "▀▀▀▀▀▀▀▀"
  1292.               @ 15, 36 SAY "▄"
  1293.             CASE pc_data = BN_PRESSED
  1294.               @ 16, 29 SAY SPACE( 8 )
  1295.               @ 15, 28 SAY " "
  1296.               @ 15, 36 SAY " "
  1297.               @ 15, 29 SAY '  Help  ' COLOR w+/g
  1298.           ENDCASE
  1299.         CASE pn_msg = BN_CLICKED
  1300.           DO TButton WITH WM_PAINT, BN_PRESSED, 50
  1301.           DO _HelpSys WITH cDialog, ;
  1302.                 LEFT( TRANSFORM( aObjPoint[ nCurrent ], "@L 99" ) + ;
  1303.                       aClkObj[ aObjPoint[ nCurrent ], 11 ], 10 ), ;
  1304.                 cHelpFile
  1305.           DO TButton WITH WM_PAINT, BN_PAINT, 50
  1306.           DO TButton WITH WM_PAINT, SE_SHADOW, 50
  1307.       ENDCASE
  1308.  
  1309.     CASE pnObject = 51                  && BT_LINK
  1310.       DO CASE
  1311.         CASE pn_msg = WM_PAINT
  1312.           DO CASE
  1313.             CASE pc_data = BN_PAINT
  1314.               @ 15, 40 SAY ' Link options ... ' COLOR n/g
  1315.             CASE pc_data = BN_HILITE
  1316.               @ 15, 40 SAY ' Link options ... ' COLOR w+/g
  1317.             CASE pc_data = BN_UNHILITE
  1318.               @ 15, 40 SAY ' Link options ... ' COLOR n/g
  1319.             CASE pc_data = BN_DEFAULT
  1320.               @ 15, 40 SAY ' Link options ... ' COLOR bg+/g
  1321.             CASE pc_data = BN_DISABLE
  1322.               @ 15, 40 SAY ' Link options ... ' COLOR n+/g
  1323.             CASE pc_data = SE_SHADOW
  1324.               @ 16, 41 SAY "▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"
  1325.               @ 15, 58 SAY "▄"
  1326.             CASE pc_data = BN_PRESSED
  1327.               @ 16, 41 SAY SPACE( 18 )
  1328.               @ 15, 40 SAY " "
  1329.               @ 15, 58 SAY " "
  1330.               @ 15, 41 SAY ' Link options ... ' COLOR w+/g
  1331.           ENDCASE
  1332.           IF pc_data <> BN_PRESSED .AND. pc_data <> BN_DISABLE
  1333.             @ 15, 41 SAY "L" COLOR gr+/g
  1334.           ENDIF
  1335.         CASE pn_msg = BN_CLICKED
  1336.           DO TButton WITH WM_PAINT, BN_PRESSED, 51
  1337.  
  1338.           IF BDLDrvr()                                                        
  1339.           ENDIF
  1340.  
  1341.           DO TButton WITH WM_PAINT, BN_PAINT, 51
  1342.           DO TButton WITH WM_PAINT, SE_SHADOW, 51
  1343.       ENDCASE
  1344.  
  1345.   ENDCASE
  1346.  
  1347. RETURN
  1348. *-- EOP: TButton WITH pn_msg, pc_data, pnObject
  1349.  
  1350.  
  1351. PROCEDURE TList
  1352. PARAMETERS pn_msg, p__data, pnObject
  1353. *----------------------------------------------------------------------------
  1354. * NAME
  1355. *   TList -
  1356. *
  1357. * DESCRIPTION
  1358. *
  1359. * PARAMETERS
  1360. *   pn_msg     =
  1361. *   p__data    =
  1362. *   pnObject   =
  1363. *
  1364. *----------------------------------------------------------------------------
  1365.   PRIVATE cPopDef
  1366.   cPopDef = ""
  1367.  
  1368.   DO CASE
  1369.     CASE pnObject = 9
  1370.       DO CASE
  1371.         CASE pn_msg = WM_PAINT
  1372.           DO CASE
  1373.             CASE p__data = LBN_KILLFO
  1374.               DO HasTitle WITH nCurrent, BN_UNHILITE
  1375.             CASE p__data = WM_DRAWITEM
  1376.               SET COLOR OF MESS TO n/gb
  1377.               SET COLOR OF TITLE TO n/gb
  1378.               IF ISBLANK( CD_FILE_1 )
  1379.                 DEFINE POPUP Cd_file_1 FROM  4,  7 TO 18, 21 PROMPT FILES LIKE *.*
  1380.               ELSE
  1381.                 DEFINE POPUP Cd_file_1 FROM  4,  7 TO 18, 21 PROMPT FILES LIKE &CD_FILE_1
  1382.               ENDIF
  1383.               SHOW POPUP CD_FILE_1
  1384.           ENDCASE
  1385.         CASE pn_msg = LBN_SETFOC
  1386.           SET COLOR OF MESS TO n/gb
  1387.           SET COLOR OF TITLE TO n/gb
  1388.           nMsEvent = 0
  1389.           nMess = 0
  1390.           nAccel = 0                    && dBRIEF Tag...
  1391.           pl_IsPop = .T.
  1392.  
  1393.           ON MOUSE DO MsHand WITH MROW(), MCOL(), .T.
  1394.           DO SetOnKey
  1395.           ON KEY LABEL Tab DO TabOut WITH KB_TAB
  1396.           ON KEY LABEL BackTab DO TabOut WITH KB_SHIFTTAB
  1397.  
  1398.           lOk = .T.
  1399.           ON ERROR lOk = .F.
  1400.           ON POPUP CD_FILE_1 DO TList WITH LBN_SELCHA, .F., nCurrent
  1401.           ON ERROR
  1402.           IF .NOT. lOk
  1403.             DO TList WITH WM_PAINT, WM_DRAWITEM, nCurrent
  1404.             ON POPUP CD_FILE_1 DO TList WITH LBN_SELCHA, .F., nCurrent
  1405.           ENDIF
  1406.           ON SELECTION POPUP CD_FILE_1 DO TList WITH LBN_DBLCLK, .F., nCurrent
  1407.  
  1408.           *---------------------------------------------
  1409.           *-- Keyboard to position bar at last selection
  1410.           *---------------------------------------------
  1411.           IF .NOT. ISBLANK( CATALOG() )
  1412.             n = nCD_FILE - 2
  1413.           ELSE
  1414.             IF nCD_FILE = 3
  1415.               n = 0
  1416.             ELSE
  1417.               n =  nCD_FILE - 3
  1418.             ENDIF
  1419.           ENDIF
  1420.           IF n > 0
  1421.             i = 1
  1422.             DO WHILE i < n
  1423.               KEYBOARD [{DnArrow}]
  1424.               i = i + 1
  1425.             ENDDO
  1426.           ENDIF
  1427.  
  1428.           ACTIVATE POPUP CD_FILE_1
  1429.           ON KEY LABEL Tab
  1430.           ON KEY LABEL BackTab
  1431.           DO ClrOnKey
  1432.           ON MOUSE
  1433.  
  1434.           pl_IsPop = .F.                && dBRIEF Tag...
  1435.  
  1436.           IF BAR() > 0
  1437.             nMess = KB_ENTER
  1438.             ON ERROR lOk = .F.
  1439.             RESTORE SCREEN FROM CD_FILE_1
  1440.             RELEASE SCREEN CD_FILE_1
  1441.             ON ERROR
  1442.           ELSE
  1443.             IF nMess = 0
  1444.               IF nMsEvent = KB_MOUSE
  1445.                 nMess = KB_MOUSE
  1446.                 RESTORE SCREEN FROM CD_FILE_1
  1447.                 RELEASE SCREEN CD_FILE_1
  1448.               ELSE
  1449.                 nMess = LASTKEY()
  1450.               ENDIF
  1451.             ELSE
  1452.               ON ERROR lOk = .F.
  1453.               RESTORE SCREEN FROM CD_FILE_1
  1454.               RELEASE SCREEN CD_FILE_1
  1455.               ON ERROR lOk = .F.
  1456.             ENDIF
  1457.           ENDIF
  1458.         CASE pn_msg = LBN_SELCHA
  1459.           *-- ON POPUP Handler here
  1460.           IF pnObject = 9
  1461.             IF BDCFill( [CD_FILE_1] )
  1462.             ENDIF
  1463.           ENDIF
  1464.  
  1465.         CASE pn_msg = LBN_DBLCLK
  1466.           SAVE SCREEN TO CD_FILE_1
  1467.           STORE BAR() TO nCD_FILE
  1468.           DEACTIVATE POPUP
  1469.       ENDCASE
  1470.     CASE pnObject = 37
  1471.       DO CASE
  1472.         CASE pn_msg = WM_PAINT
  1473.           DO CASE
  1474.             CASE p__data = LBN_KILLFO
  1475.               DO HasTitle WITH nCurrent, BN_UNHILITE
  1476.             CASE p__data = WM_DRAWITEM
  1477.               SET COLOR OF MESS TO n/gb
  1478.               SET COLOR OF TITLE TO n/gb
  1479.               IF ISBLANK( CD_LIST_1 )
  1480.                 DEFINE POPUP Cd_list_1 FROM 12,  7 TO 18, 22 PROMPT FILES LIKE *.*
  1481.               ELSE
  1482.                 DEFINE POPUP Cd_list_1 FROM 12,  7 TO 18, 22 PROMPT FILES LIKE &CD_LIST_1
  1483.               ENDIF
  1484.               SHOW POPUP CD_LIST_1
  1485.           ENDCASE
  1486.         CASE pn_msg = LBN_SETFOC
  1487.           SET COLOR OF MESS TO n/gb
  1488.           SET COLOR OF TITLE TO n/gb
  1489.           nMsEvent = 0
  1490.           nMess = 0
  1491.           nAccel = 0                    && dBRIEF Tag...
  1492.           pl_IsPop = .T.
  1493.  
  1494.           ON MOUSE DO MsHand WITH MROW(), MCOL(), .T.
  1495.           DO SetOnKey
  1496.           ON KEY LABEL Tab DO TabOut WITH KB_TAB
  1497.           ON KEY LABEL BackTab DO TabOut WITH KB_SHIFTTAB
  1498.  
  1499.           lOk = .T.
  1500.           ON ERROR lOk = .F.
  1501.           ON POPUP CD_LIST_1 DO TList WITH LBN_SELCHA, .F., nCurrent
  1502.           ON ERROR
  1503.           IF .NOT. lOk
  1504.             DO TList WITH WM_PAINT, WM_DRAWITEM, nCurrent
  1505.             ON POPUP CD_LIST_1 DO TList WITH LBN_SELCHA, .F., nCurrent
  1506.           ENDIF
  1507.           ON SELECTION POPUP CD_LIST_1 DO TList WITH LBN_DBLCLK, .F., nCurrent
  1508.  
  1509.           *---------------------------------------------
  1510.           *-- Keyboard to position bar at last selection
  1511.           *---------------------------------------------
  1512.           IF .NOT. ISBLANK( CATALOG() )
  1513.             n = nCD_LIST - 2
  1514.           ELSE
  1515.             IF nCD_LIST = 3
  1516.               n = 0
  1517.             ELSE
  1518.               n =  nCD_LIST - 3
  1519.             ENDIF
  1520.           ENDIF
  1521.           IF n > 0
  1522.             i = 1
  1523.             DO WHILE i < n
  1524.               KEYBOARD [{DnArrow}]
  1525.               i = i + 1
  1526.             ENDDO
  1527.           ENDIF
  1528.  
  1529.           ACTIVATE POPUP CD_LIST_1
  1530.           ON KEY LABEL Tab
  1531.           ON KEY LABEL BackTab
  1532.           DO ClrOnKey
  1533.           ON MOUSE
  1534.  
  1535.           pl_IsPop = .F.                && dBRIEF Tag...
  1536.  
  1537.           IF BAR() > 0
  1538.             nMess = KB_ENTER
  1539.             ON ERROR lOk = .F.
  1540.             RESTORE SCREEN FROM CD_LIST_1
  1541.             RELEASE SCREEN CD_LIST_1
  1542.             ON ERROR
  1543.           ELSE
  1544.             IF nMess = 0
  1545.               IF nMsEvent = KB_MOUSE
  1546.                 nMess = KB_MOUSE
  1547.                 RESTORE SCREEN FROM CD_LIST_1
  1548.                 RELEASE SCREEN CD_LIST_1
  1549.               ELSE
  1550.                 nMess = LASTKEY()
  1551.               ENDIF
  1552.             ELSE
  1553.               ON ERROR lOk = .F.
  1554.               RESTORE SCREEN FROM CD_LIST_1
  1555.               RELEASE SCREEN CD_LIST_1
  1556.               ON ERROR lOk = .F.
  1557.             ENDIF
  1558.           ENDIF
  1559.         CASE pn_msg = LBN_SELCHA
  1560.           *-- ON POPUP Handler here
  1561.         CASE pn_msg = LBN_DBLCLK
  1562.           SAVE SCREEN TO CD_LIST_1
  1563.           STORE BAR() TO nCD_LIST
  1564.           DEACTIVATE POPUP
  1565.       ENDCASE
  1566.  
  1567.   ENDCASE
  1568.  
  1569. RETURN
  1570. *-- EOP: TList WITH pn_msg, p__data, pnObject
  1571.  
  1572. PROCEDURE TabOut
  1573. PARAMETERS pn_Key
  1574. *----------------------------------------------------------------------------
  1575. * NAME
  1576. *   TabOut -
  1577. *
  1578. * DESCRIPTION
  1579. *
  1580. * PARAMETERS
  1581. *   pn_Key     =
  1582. *
  1583. *----------------------------------------------------------------------------
  1584.   PRIVATE nRow, nCol, cPath, cPrompt, cDrive
  1585.   nRow = ROW()
  1586.   nCol = COL()
  1587.  
  1588.   DO CASE
  1589.     CASE nCurrent = 9
  1590.       STORE BAR() TO nCD_FILE
  1591.       *-- Redisplay the bar because of a "feature" in dBASE
  1592.       cPrompt = TRIM( PROMPT() )
  1593.       cDrive = _FileDrv( cPrompt )
  1594.       IF .NOT. ISBLANK( cDrive )
  1595.         cPath = cDrive + ":" + _FilePath( cPrompt )
  1596.       ELSE
  1597.         cPath = _FilePath( cPrompt )
  1598.       ENDIF
  1599.       cPrompt = TRIM( SUBSTR( cPrompt, LEN( cPath )+1 ) )
  1600.       cPrompt = LEFT( cPrompt + SPACE( 13 ), 13 )
  1601.       @ nRow, nCol SAY cPrompt COLOR w+/g
  1602.       SAVE SCREEN TO CD_FILE_1
  1603.       nMess = pn_Key
  1604.       KEYBOARD "{LeftArrow}"
  1605.     CASE nCurrent = 37
  1606.       STORE BAR() TO nCD_LIST
  1607.       *-- Redisplay the bar because of a "feature" in dBASE
  1608.       cPrompt = TRIM( PROMPT() )
  1609.       cDrive = _FileDrv( cPrompt )
  1610.       IF .NOT. ISBLANK( cDrive )
  1611.         cPath = cDrive + ":" + _FilePath( cPrompt )
  1612.       ELSE
  1613.         cPath = _FilePath( cPrompt )
  1614.       ENDIF
  1615.       cPrompt = TRIM( SUBSTR( cPrompt, LEN( cPath )+1 ) )
  1616.       cPrompt = LEFT( cPrompt + SPACE( 14 ), 14 )
  1617.       @ nRow, nCol SAY cPrompt COLOR w+/g
  1618.       SAVE SCREEN TO CD_LIST_1
  1619.       nMess = pn_Key
  1620.       KEYBOARD "{LeftArrow}"
  1621.   ENDCASE
  1622.  
  1623. RETURN
  1624. *-- EOP: TabOut WITH pn_Key
  1625.  
  1626.  
  1627. PROCEDURE TCombo
  1628. PARAMETERS pn_msg, p__data, pnObject
  1629. *----------------------------------------------------------------------------
  1630. * NAME
  1631. *   TCombo -
  1632. *
  1633. * DESCRIPTION
  1634. *
  1635. * PARAMETERS
  1636. *   pn_msg     =
  1637. *   p__data    =
  1638. *   pnObject   =
  1639. *
  1640. *----------------------------------------------------------------------------
  1641.   PRIVATE cDisplay
  1642.   DO CASE
  1643.     CASE pnObject = 9
  1644.       DO CASE
  1645.         CASE pn_msg = WM_PAINT
  1646.           DO CASE
  1647.             CASE p__data = CBN_KILLFOC
  1648.               DO HasTitle WITH pnObject, BN_UNHILITE
  1649.             CASE p__data = CB_HIDELST
  1650.               @ 3, 6 GET CD_FILE_1 PICTURE 'XXXXXXXXXXXXX'
  1651.               @ 3, 19 SAY CHR(222) COLOR g/w
  1652.               @ 3, 20 SAY CHR(25) COLOR n/g
  1653.               @ 3, 21 SAY CHR(221) COLOR g/w
  1654.               CLEAR GETS
  1655.             CASE p__data = CB_SHOWDRO
  1656.               DO TList WITH WM_PAINT, WM_DRAWITEM, pnObject
  1657.           ENDCASE
  1658.         CASE pn_msg = CBN_DROPDOW
  1659.           SAVE SCREEN TO Tcombo
  1660.           DO TCombo WITH WM_PAINT, CB_SHOWDRO, pnObject
  1661.           DO TCombo WITH CBN_INLIST, .F., pnObject
  1662.           DO TCombo WITH WM_PAINT, CB_HIDELST, pnObject
  1663.           RESTORE SCREEN FROM Tcombo
  1664.           RELEASE SCREEN Tcombo
  1665.           @ 3, 6 GET CD_FILE_1 PICTURE 'XXXXXXXXXXXXX'
  1666.           CLEAR GETS
  1667.         CASE pn_msg = CB_SELECTS
  1668.           *-----------------------------------------------------
  1669.           *-- Do not repaint the get area during scroll re-entry
  1670.           *-----------------------------------------------------
  1671.           IF nCd_file > 0
  1672.             IF BAR() <> nCd_file
  1673.               RETURN
  1674.             ELSE
  1675.               nCd_file = 0
  1676.             ENDIF
  1677.           ENDIF
  1678.  
  1679.           IF TYPE( "p__data" ) = "L"
  1680.             cPrompt = PROMPT()
  1681.           ELSE
  1682.             cPrompt = p__data
  1683.           ENDIF
  1684.           cFileRoot = _FileRoot( cPrompt )
  1685.           IF .NOT. "<" $ cFileRoot
  1686.             STORE cFileRoot + "." + _FileType( cPrompt ) TO cDisplay
  1687.             STORE LEFT( cPrompt + SPACE( 80 ), 80 ) TO CD_FILE_1
  1688.             STORE LEFT( cDisplay + SPACE( 80 ), 80 ) TO cDisplay
  1689.             @ 3 , 6 GET cDisplay PICTURE 'XXXXXXXXXXXXX'
  1690.             CLEAR GETS
  1691.           ENDIF
  1692.         CASE pn_msg = CBN_INLIST
  1693.           SET COLOR OF MESS TO n/gb
  1694.           SET COLOR OF TITLE TO n/gb
  1695.           nMsEvent = 0
  1696.           nMess = 0
  1697.           nAccel = 0
  1698.           pl_IsPop = .T.
  1699.           ON MOUSE DO MsHand WITH MROW(), MCOL(), .T.
  1700.           DO SetOnKey
  1701.           ON KEY LABEL Tab DO TabOut WITH KB_TAB
  1702.           ON KEY LABEL BackTab DO TabOut WITH KB_SHIFTTAB
  1703.           ON POPUP CD_FILE_1 DO TCombo WITH CB_SELECTS, .F., pnObject
  1704.           ON SELECTION POPUP CD_FILE_1 DO TComboSel
  1705.  
  1706.           *-------------------------------------------------
  1707.           *-- Keyboard in down arrows to match prompt string
  1708.           *-------------------------------------------------
  1709.           IF nCd_file > 0
  1710.             n = 1
  1711.             nHowMany = nCd_file - 1
  1712.             IF ISBLANK( CATALOG() ) 
  1713.               nHowMany = nHowMany - 3
  1714.             ELSE
  1715.               nHowMany = nHowMany - 2
  1716.             ENDIF
  1717.             DO WHILE n <= nHowMany
  1718.               KEYBOARD [{DnArrow}]
  1719.               n = n + 1
  1720.             ENDDO
  1721.           ENDIF
  1722.  
  1723.           ACTIVATE POPUP CD_FILE_1
  1724.  
  1725.           pl_IsPop = .F.
  1726.           ON KEY LABEL Tab
  1727.           ON KEY LABEL BackTab
  1728.           DO ClrOnKey
  1729.           ON MOUSE
  1730.  
  1731.           IF BAR() > 0
  1732.             nMess = KB_ENTER
  1733.             nCd_file = BAR()
  1734.           ELSE
  1735.             IF nMess = 0
  1736.               IF nMsEvent = KB_MOUSE
  1737.                 nMess = KB_MOUSE
  1738.                 RESTORE SCREEN FROM CD_FILE_1
  1739.                 RELEASE SCREEN CD_FILE_1
  1740.               ELSE
  1741.                 nMess = LASTKEY()
  1742.               ENDIF
  1743.             ELSE
  1744.               RESTORE SCREEN FROM CD_FILE_1
  1745.               RELEASE SCREEN CD_FILE_1
  1746.             ENDIF
  1747.           ENDIF
  1748.       ENDCASE
  1749.     CASE pnObject = 37
  1750.       DO CASE
  1751.         CASE pn_msg = WM_PAINT
  1752.           DO CASE
  1753.             CASE p__data = CBN_KILLFOC
  1754.               DO HasTitle WITH pnObject, BN_UNHILITE
  1755.             CASE p__data = CB_HIDELST
  1756.               @ 11, 6 GET CD_LIST_1 PICTURE 'XXXXXXXXXXXXX'
  1757.               @ 11, 19 SAY CHR(222) COLOR g/w
  1758.               @ 11, 20 SAY CHR(25) COLOR n/g
  1759.               @ 11, 21 SAY CHR(221) COLOR g/w
  1760.               CLEAR GETS
  1761.             CASE p__data = CB_SHOWDRO
  1762.               DO TList WITH WM_PAINT, WM_DRAWITEM, pnObject
  1763.           ENDCASE
  1764.         CASE pn_msg = CBN_DROPDOW
  1765.           SAVE SCREEN TO Tcombo
  1766.           DO TCombo WITH WM_PAINT, CB_SHOWDRO, pnObject
  1767.           DO TCombo WITH CBN_INLIST, .F., pnObject
  1768.           DO TCombo WITH WM_PAINT, CB_HIDELST, pnObject
  1769.           RESTORE SCREEN FROM Tcombo
  1770.           RELEASE SCREEN Tcombo
  1771.           @ 11, 6 GET CD_LIST_1 PICTURE 'XXXXXXXXXXXXX'
  1772.           CLEAR GETS
  1773.         CASE pn_msg = CB_SELECTS
  1774.           *-----------------------------------------------------
  1775.           *-- Do not repaint the get area during scroll re-entry
  1776.           *-----------------------------------------------------
  1777.           IF nCd_list > 0
  1778.             IF BAR() <> nCd_list
  1779.               RETURN
  1780.             ELSE
  1781.               nCd_list = 0
  1782.             ENDIF
  1783.           ENDIF
  1784.  
  1785.           IF TYPE( "p__data" ) = "L"
  1786.             cPrompt = PROMPT()
  1787.           ELSE
  1788.             cPrompt = p__data
  1789.           ENDIF
  1790.           cFileRoot = _FileRoot( cPrompt )
  1791.           IF .NOT. "<" $ cFileRoot
  1792.             STORE cFileRoot + "." + _FileType( cPrompt ) TO cDisplay
  1793.             STORE LEFT( cPrompt + SPACE( 80 ), 80 ) TO CD_LIST_1
  1794.             STORE LEFT( cDisplay + SPACE( 80 ), 80 ) TO cDisplay
  1795.             @ 11 , 6 GET cDisplay PICTURE 'XXXXXXXXXXXXX'
  1796.             CLEAR GETS
  1797.           ENDIF
  1798.         CASE pn_msg = CBN_INLIST
  1799.           SET COLOR OF MESS TO n/gb
  1800.           SET COLOR OF TITLE TO n/gb
  1801.           nMsEvent = 0
  1802.           nMess = 0
  1803.           nAccel = 0
  1804.           pl_IsPop = .T.
  1805.           ON MOUSE DO MsHand WITH MROW(), MCOL(), .T.
  1806.           DO SetOnKey
  1807.           ON KEY LABEL Tab DO TabOut WITH KB_TAB
  1808.           ON KEY LABEL BackTab DO TabOut WITH KB_SHIFTTAB
  1809.           ON POPUP CD_LIST_1 DO TCombo WITH CB_SELECTS, .F., pnObject
  1810.           ON SELECTION POPUP CD_LIST_1 DO TComboSel
  1811.  
  1812.           *-------------------------------------------------
  1813.           *-- Keyboard in down arrows to match prompt string
  1814.           *-------------------------------------------------
  1815.           IF nCd_list > 0
  1816.             n = 1
  1817.             nHowMany = nCd_list - 1
  1818.             IF ISBLANK( CATALOG() ) 
  1819.               nHowMany = nHowMany - 3
  1820.             ELSE
  1821.               nHowMany = nHowMany - 2
  1822.             ENDIF
  1823.             DO WHILE n <= nHowMany
  1824.               KEYBOARD [{DnArrow}]
  1825.               n = n + 1
  1826.             ENDDO
  1827.           ENDIF
  1828.  
  1829.           ACTIVATE POPUP CD_LIST_1
  1830.  
  1831.           pl_IsPop = .F.
  1832.           ON KEY LABEL Tab
  1833.           ON KEY LABEL BackTab
  1834.           DO ClrOnKey
  1835.           ON MOUSE
  1836.  
  1837.           IF BAR() > 0
  1838.             nMess = KB_ENTER
  1839.             nCd_list = BAR()
  1840.           ELSE
  1841.             IF nMess = 0
  1842.               IF nMsEvent = KB_MOUSE
  1843.                 nMess = KB_MOUSE
  1844.                 RESTORE SCREEN FROM CD_LIST_1
  1845.                 RELEASE SCREEN CD_LIST_1
  1846.               ELSE
  1847.                 nMess = LASTKEY()
  1848.               ENDIF
  1849.             ELSE
  1850.               RESTORE SCREEN FROM CD_LIST_1
  1851.               RELEASE SCREEN CD_LIST_1
  1852.             ENDIF
  1853.           ENDIF
  1854.       ENDCASE
  1855.  
  1856.   ENDCASE
  1857.  
  1858. RETURN
  1859. *-- EOP: TCombo WITH pn_msg, p__data, pnObject
  1860.  
  1861. PROCEDURE TComboSel
  1862. *----------------------------------------------------------------------------
  1863. * NAME
  1864. *   TComboSel -
  1865. *
  1866. * DESCRIPTION
  1867. *
  1868. *----------------------------------------------------------------------------
  1869.  
  1870.   DO TCombo WITH CB_SELECTS, .F., pnObject
  1871.   DEACTIVATE POPUP
  1872.  
  1873. RETURN
  1874. *-- EOP: TComboSel
  1875.  
  1876. PROCEDURE GetDD
  1877. *----------------------------------------------------------------------------
  1878. * NAME
  1879. *   GetDD - Get Edit field for Combo Box Drop Down
  1880. *
  1881. * DESCRIPTION
  1882. *
  1883. *----------------------------------------------------------------------------
  1884.  
  1885.   nMess = 0
  1886.   nAccel = 0
  1887.  
  1888.   *-------------------------------------------------
  1889.   *-- Look to see if the object in focus has a title
  1890.   *-------------------------------------------------
  1891.   DO HasTitle WITH nCurrent, BN_HILITE
  1892.  
  1893.   nMsEvent = 0
  1894.   ON MOUSE DO MsHand WITH MROW(), MCOL()
  1895.   DO SetOnKey
  1896.  
  1897.   DO CASE
  1898.     CASE nCurrent = 9                    && CD_FILE_1
  1899.       @ 3, 6 GET CD_FILE_1 PICTURE '@S13'
  1900.       @ 3, 19 SAY CHR(222) COLOR g/w
  1901.       @ 3, 20 SAY CHR(25) COLOR n/g
  1902.       @ 3, 21 SAY CHR(221) COLOR g/w
  1903.     CASE nCurrent = 37                   && CD_LIST_1
  1904.       @ 11, 6 GET CD_LIST_1 PICTURE '@S13'
  1905.       @ 11, 19 SAY CHR(222) COLOR g/w
  1906.       @ 11, 20 SAY CHR(25) COLOR n/g
  1907.       @ 11, 21 SAY CHR(221) COLOR g/w
  1908.   ENDCASE
  1909.  
  1910.   SET CURSOR ON
  1911.   READ
  1912.   SET CURSOR OFF
  1913.  
  1914.   DO ClrOnKey
  1915.   ON MOUSE
  1916.   IF nMsEvent = KB_MOUSE
  1917.     nMess = KB_MOUSE
  1918.   ELSE
  1919.     nMess = LASTKEY()
  1920.   ENDIF
  1921.  
  1922. RETURN
  1923. *-- EOP: GetDD
  1924.  
  1925. PROCEDURE SetOnKey
  1926. *----------------------------------------------------------------------------
  1927. * NAME
  1928. *   SetOnKey - For each pick key, set on key label
  1929. *
  1930. * DESCRIPTION
  1931. *
  1932. *----------------------------------------------------------------------------
  1933.  
  1934.   ON KEY LABEL Alt-G DO AKeyHand WITH '9'
  1935.   ON KEY LABEL Alt-d DO AKeyHand WITH '11'
  1936.   ON KEY LABEL Alt-C DO AKeyHand WITH '20'
  1937.   ON KEY LABEL Alt-S DO AKeyHand WITH '24'
  1938.   ON KEY LABEL Alt-o DO AKeyHand WITH '21'
  1939.   ON KEY LABEL Alt-p DO AKeyHand WITH '25'
  1940.   ON KEY LABEL Alt-N DO AKeyHand WITH '28'
  1941.   ON KEY LABEL Alt-T DO AKeyHand WITH '31'
  1942.   ON KEY LABEL Alt-F DO AKeyHand WITH '37'
  1943.   ON KEY LABEL Alt-E DO AKeyHand WITH '39'
  1944.   ON KEY LABEL Alt-L DO AKeyHand WITH '51'
  1945.  
  1946. RETURN
  1947. *-- EOP: SetOnKey
  1948.  
  1949.  
  1950. PROCEDURE ClrOnKey
  1951. *----------------------------------------------------------------------------
  1952. * NAME
  1953. *   ClrOnKey - For each pick key, clear on label
  1954. *
  1955. * DESCRIPTION
  1956. *
  1957. *----------------------------------------------------------------------------
  1958.  
  1959.   ON KEY LABEL Alt-G
  1960.   ON KEY LABEL Alt-d
  1961.   ON KEY LABEL Alt-C
  1962.   ON KEY LABEL Alt-S
  1963.   ON KEY LABEL Alt-o
  1964.   ON KEY LABEL Alt-p
  1965.   ON KEY LABEL Alt-N
  1966.   ON KEY LABEL Alt-T
  1967.   ON KEY LABEL Alt-F
  1968.   ON KEY LABEL Alt-E
  1969.   ON KEY LABEL Alt-L
  1970.  
  1971. RETURN
  1972. *-- EOP: ClrOnKey
  1973.  
  1974.  
  1975. PROCEDURE AKeyHand
  1976. PARAMETERS cId
  1977. *----------------------------------------------------------------------------
  1978. * NAME
  1979. *   AKeyHand - On key handler for Accel key from popup or get
  1980. *
  1981. * DESCRIPTION
  1982. *
  1983. * PARAMETERS
  1984. *   nId        =
  1985. *
  1986. *----------------------------------------------------------------------------
  1987.  
  1988.   IF nAccel <> nCurrent
  1989.     nAccel = VAL( cId )
  1990.     IF TYPE( "pl_IsPop" ) = "L" .AND. pl_IsPop
  1991.       DO CASE
  1992.         CASE nCurrent = 9
  1993.           STORE BAR() TO nCD_FILE
  1994.           SAVE SCREEN TO CD_FILE_1
  1995.           KEYBOARD "{LeftArrow}"
  1996.           nMess = KB_ENTER
  1997.         CASE nCurrent = 37
  1998.           STORE BAR() TO nCD_LIST
  1999.           SAVE SCREEN TO CD_LIST_1
  2000.           KEYBOARD "{LeftArrow}"
  2001.           nMess = KB_ENTER
  2002.         OTHERWISE
  2003.           KEYBOARD "{Ctrl-W}"
  2004.           nMess = KB_CTRLW
  2005.     ENDCASE
  2006.   ELSE
  2007.     KEYBOARD "{Ctrl-W}"
  2008.     nMess = KB_CTRLW
  2009.   ENDIF
  2010.   ELSE
  2011.     nAccel = 0
  2012.   ENDIF
  2013.  
  2014. RETURN
  2015. *-- EOP: AKeyHand WITH nId
  2016.  
  2017.  
  2018. PROCEDURE CkWaitAc
  2019. *----------------------------------------------------------------------------
  2020. * NAME
  2021. *   CkWaitAc - Look for Accel key from Wait command
  2022. *
  2023. * DESCRIPTION
  2024. *   This routine has high International risk for translations.
  2025. *----------------------------------------------------------------------------
  2026.  
  2027.   IF nMess < 0
  2028.     nAccPress = nMess + 500
  2029.   ELSE
  2030.     IF nMess >= 97 .AND. nMess <= 122
  2031.       nMess = nMess - 32
  2032.     ENDIF
  2033.     nAccPress = nMess
  2034.   ENDIF
  2035.  
  2036.   DO CASE
  2037.     CASE nAccPress = 71                  && G - CD_FILE_0
  2038.       nAccel = 9
  2039.     CASE nAccPress = 68                  && d - BT_EDITCF
  2040.       nAccel = 11
  2041.     CASE nAccPress = 67                  && C - RB_MODE_1
  2042.       nAccel = 20
  2043.     CASE nAccPress = 83                  && S - RB_MODE_2
  2044.       nAccel = 24
  2045.     CASE nAccPress = 79                  && o - CK_OPTI_1
  2046.       nAccel = 21
  2047.     CASE nAccPress = 80                  && p - CK_OPTI_2
  2048.       nAccel = 25
  2049.     CASE nAccPress = 78                  && N - CK_OPTI_3
  2050.       nAccel = 28
  2051.     CASE nAccPress = 84                  && T - CK_OPTI_4
  2052.       nAccel = 31
  2053.     CASE nAccPress = 70                  && F - CD_LIST_0
  2054.       nAccel = 37
  2055.     CASE nAccPress = 69                  && E - BT_EDIT
  2056.       nAccel = 39
  2057.     CASE nAccPress = 76                  && L - BT_LINK
  2058.       nAccel = 51
  2059.     OTHERWISE
  2060.       nAccel = 0
  2061.   ENDCASE
  2062.  
  2063. RETURN
  2064. *-- EOP: CkWaitAc
  2065.  
  2066.  
  2067. FUNCTION GetMsTo
  2068. PARAMETER plChkOnly
  2069. *----------------------------------------------------------------------------
  2070. * NAME
  2071. *   GetMsTo() -
  2072. *
  2073. * DESCRIPTION
  2074. *
  2075. *----------------------------------------------------------------------------
  2076.  
  2077.   *-- Check for a click on the close button
  2078.   IF nMRow = nRowCls .AND. nMCol >= nLColCls .AND. nMCol <= nRColCls
  2079.     nMess = DLN_CANCEL
  2080.     nRtn = 0
  2081.   ELSE
  2082.     IF nMRow = nRowCls .AND. nMCol >= nCol .AND. nMCol <= nRWinCol
  2083.       *---------------------------------------------------------
  2084.       *-- All this to remove the shadow before moving the window
  2085.       *---------------------------------------------------------
  2086.       SAVE WINDOW BDCOPT TO _BDCOPT
  2087.       RELEASE WINDOW BDCOPT
  2088.       RESTORE SCREEN FROM BDCOPT
  2089.       RESTORE WINDOW BDCOPT FROM _BDCOPT
  2090.       ERASE _BDCOPT.win
  2091.       ACTIVATE WINDOW BDCOPT
  2092.  
  2093.       @ 0, 0 TO nHigh - 1, nWidth - 1 COLOR g+/w
  2094.       @ 0, 2 SAY "[ ]" COLOR g+/w
  2095.       @ 0, 3 SAY CHR( 254 ) COLOR g+/w
  2096.       @ 0, 21 SAY "[  Compiler Options  ]" COLOR g+/w
  2097.  
  2098.       *-------------------------------
  2099.       *-- Start the move window action
  2100.       *-------------------------------
  2101.       nDelX = nMRow
  2102.       nDelY = nMCol
  2103.  
  2104.       SET CONSOLE OFF
  2105.       WAIT
  2106.       SET CONSOLE ON
  2107.  
  2108.       nMRow = MROW()
  2109.       nMCol = MCOL()
  2110.       nDelX = nMRow - nDelX
  2111.       nDelY = nMCol - nDelY
  2112.       lMoveOk = .T.
  2113.       ON ERROR lMoveOk = .F.
  2114.       MOVE WINDOW BDCOPT BY nDelX, nDelY
  2115.       ON ERROR
  2116.       IF lMoveOk
  2117.         nRowCls   = nRowCls + nDelX
  2118.         nCol      = nCol + nDelY
  2119.         nLColCls  = ncol + 2            && Left column for close button
  2120.         nRColCls  = ncol + 4            && End column for close button
  2121.         nRWinCol  = ncol + nWidth - 1   && Rigth column for window
  2122.         nXOffset  = nRowCls - nOrigRow
  2123.         nYOffset  = nCol    - nOrigCol
  2124.       ENDIF
  2125.  
  2126.       *---------------------------------------------------------
  2127.       *-- Display the new shadow for after moving the dialog box
  2128.       *---------------------------------------------------------
  2129.       SAVE WINDOW BDCOPT TO _BDCOPT
  2130.       RELEASE WINDOW BDCOPT
  2131.       RESTORE SCREEN FROM BDCOPT
  2132.       ACTIVATE SCREEN
  2133.       IF nCol + 63 < 80 .AND. nRowCls + 19 <= nScreen
  2134.         @ nRowCls + 1, nCol + 1 FILL TO nRowCls + 19, nCol + 63 COLOR n+/n
  2135.       ENDIF
  2136.       RESTORE WINDOW BDCOPT FROM _BDCOPT
  2137.       ERASE _BDCOPT.win
  2138.       ACTIVATE WINDOW BDCOPT
  2139.  
  2140.       @ 0, 0 TO nHigh - 1, nWidth - 1 DOUBLE COLOR w+/w
  2141.       @ 0, 2 SAY "[ ]" COLOR w+/w
  2142.       @ 0, 3 SAY CHR( 254 ) COLOR g+/w
  2143.       @ 0, 21 SAY "[  Compiler Options  ]" COLOR w+/w
  2144.  
  2145.       nRtn = -1
  2146.     ELSE
  2147.       *-----------------------------------
  2148.       *-- Check for click on a live object
  2149.       *-----------------------------------
  2150.       nRtn = 0
  2151.       i = 1
  2152.       DO WHILE i <= nClkObj
  2153.         IF nMRow =  aClkObj[ i, 1 ] + nXOffSet .AND. ;
  2154.            nMCol >= aClkObj[ i, 2 ] + nYOffset .AND. ;
  2155.            nMCol <= aClkObj[ i, 3 ] + nYOffset
  2156.           nRtn = aClkObj[ i, 4 ]
  2157.           EXIT
  2158.         ENDIF
  2159.         i = i + 1
  2160.       ENDDO
  2161.  
  2162.       IF nRtn = 0
  2163.         *----------------------------------------------------------
  2164.         *-- Not found, check for a click in a Combo box or list box
  2165.         *----------------------------------------------------------
  2166.         IF nClkBox > 0
  2167.           i = 1
  2168.           DO WHILE i <= nClkBox
  2169.             IF nMRow >= aClkBox[ i, 1 ] + nXOffset .AND. ;
  2170.                nMRow <= aClkBox[ i, 1 ] + nXOffset + aClkBox[ i, 2 ] .AND. ;
  2171.                nMCol >= aClkBox[ i, 3 ] + nYOffset .AND. ;
  2172.                nMCol <= aClkBox[ i, 3 ] + nYOffset + aClkBox[ i, 4 ]
  2173.               nRtn = aClkBox[ i, 5 ] - 1
  2174.               aClkBox[ i, 6 ] = .T.
  2175.               EXIT
  2176.             ENDIF
  2177.             i = i + 1
  2178.           ENDDO
  2179.         ENDIF
  2180.       ENDIF
  2181.  
  2182.     ENDIF
  2183.   ENDIF
  2184.  
  2185. RETURN( nRtn )
  2186. *-- EOF: GetMsTo(  )
  2187.  
  2188.  
  2189. PROCEDURE MsHand
  2190. PARAMETERS pnMRow, pnMCol, pl_IsPop
  2191. *----------------------------------------------------------------------------
  2192. * NAME
  2193. *   MsHand -
  2194. *
  2195. * DESCRIPTION
  2196. *
  2197. * PARAMETERS
  2198. *   pnMRow     =
  2199. *   pnMCol     =
  2200. *   pl_IsPop   =
  2201. *
  2202. *----------------------------------------------------------------------------
  2203.   nMRow = pnMRow
  2204.   nMCol = pnMCol
  2205.   nMsEvent = KB_MOUSE
  2206.  
  2207.   IF pl_IsPop
  2208.     DO CASE
  2209.       CASE nCurrent = 9
  2210.         STORE BAR() TO nCD_FILE
  2211.         SAVE SCREEN TO CD_FILE_1
  2212.         KEYBOARD "{LeftArrow}"
  2213.       CASE nCurrent = 37
  2214.         STORE BAR() TO nCD_LIST
  2215.         SAVE SCREEN TO CD_LIST_1
  2216.         KEYBOARD "{LeftArrow}"
  2217.     ENDCASE
  2218.   ELSE
  2219.     KEYBOARD "{Ctrl-W}"
  2220.   ENDIF
  2221.  
  2222. RETURN
  2223. *-- EOP: MsHand WITH pnMRow, pnMCol, pl_IsPop
  2224.  
  2225.  
  2226. PROCEDURE Dispatch
  2227. *----------------------------------------------------------------------------
  2228. * NAME
  2229. *   Dispatch -
  2230. *
  2231. * DESCRIPTION
  2232. *
  2233. *----------------------------------------------------------------------------
  2234.   DO CASE
  2235.     CASE nCurrent = 9                    && CD_FILE_1
  2236.       DO DispCD
  2237.     CASE nCurrent = 11                   && BT_EDITCF
  2238.       DO DispBt
  2239.     CASE nCurrent = 20                   && RB_MODE_1
  2240.       DO DispRb
  2241.     CASE nCurrent = 24                   && RB_MODE_2
  2242.       DO DispRb
  2243.     CASE nCurrent = 21                   && CK_OPTI_1
  2244.       DO DispCk
  2245.     CASE nCurrent = 25                   && CK_OPTI_2
  2246.       DO DispCk
  2247.     CASE nCurrent = 28                   && CK_OPTI_3
  2248.       DO DispCk
  2249.     CASE nCurrent = 31                   && CK_OPTI_4
  2250.       DO DispCk
  2251.     CASE nCurrent = 37                   && CD_LIST_1
  2252.       DO DispCD
  2253.     CASE nCurrent = 39                   && BT_EDIT
  2254.       DO DispBt
  2255.     CASE nCurrent = 48                   && BT_OK
  2256.       DO DispBt
  2257.     CASE nCurrent = 49                   && BT_CANCEL
  2258.       DO DispBt
  2259.     CASE nCurrent = 50                   && BT_HELP
  2260.       DO DispBt
  2261.     CASE nCurrent = 51                   && BT_LINK
  2262.       DO DispBt
  2263.   ENDCASE
  2264.  
  2265. RETURN
  2266. *-- EOP: Dispatch
  2267.  
  2268.  
  2269. PROCEDURE DispRb
  2270. *----------------------------------------------------------------------------
  2271. * NAME
  2272. *   DispRb -
  2273. *
  2274. * DESCRIPTION
  2275. *
  2276. *----------------------------------------------------------------------------
  2277.   PRIVATE nPossNext
  2278.  
  2279.   DO CASE
  2280.     CASE nMess = KB_TAB
  2281.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2282.       DO GetNext WITH .T.
  2283.     CASE nMess = KB_SHIFTTAB
  2284.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2285.       DO GetNext WITH .F.
  2286.     CASE nMess = KB_UPARROW .OR. nMess = KB_LEFTARROW
  2287.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2288.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2289.       DO GetNext WITH .F., .T.
  2290.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2291.     CASE nMess = KB_DOWNARROW .OR. nMess = KB_RTARROW
  2292.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2293.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2294.       DO GetNext WITH .T., .T.
  2295.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2296.  
  2297.     CASE nMess = KB_MOUSE
  2298.       nPossNext = GetMsTo()
  2299.       IF nPossNext > 0
  2300.         IF nPossNext <> nCurrent
  2301.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2302.           DO GetNext WITH nPossNext, .F.
  2303.         ENDIF
  2304.       ENDIF
  2305.  
  2306.     CASE nMess = KB_ENTER
  2307.       IF nDlgDef > 0
  2308.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  2309.       ENDIF
  2310.  
  2311.     OTHERWISE
  2312.       DO CkWaitAc
  2313.       IF nAccel > 0
  2314.         IF nAccel <> nCurrent
  2315.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2316.           DO GetNext WITH nAccel, .F.
  2317.         ENDIF
  2318.       ENDIF
  2319.  
  2320.   ENDCASE
  2321.  
  2322. RETURN
  2323. *-- EOP: DispRb
  2324.  
  2325.  
  2326. PROCEDURE DispCk
  2327. *----------------------------------------------------------------------------
  2328. * NAME
  2329. *   DispCk -
  2330. *
  2331. * DESCRIPTION
  2332. *
  2333. *----------------------------------------------------------------------------
  2334.   PRIVATE nPossNext
  2335.  
  2336.   DO CASE
  2337.     CASE nMess = KB_TAB
  2338.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2339.       DO GetNext WITH .T.
  2340.     CASE nMess = KB_SHIFTTAB
  2341.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2342.       DO GetNext WITH .F.
  2343.     CASE nMess = KB_UPARROW .OR. nMess = KB_LEFTARROW
  2344.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2345.       DO GetNext WITH .F., .T.
  2346.     CASE nMess = KB_DOWNARROW .OR. nMess = KB_RTARROW
  2347.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2348.       DO GetNext WITH .T., .T.
  2349.     CASE nMess = KB_SPACE
  2350.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2351.  
  2352.     CASE nMess = KB_MOUSE
  2353.       nPossNext = GetMsTo()
  2354.       IF nPossNext > 0
  2355.         IF nPossNext = nCurrent
  2356.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2357.         ELSE
  2358.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2359.           DO GetNext WITH nPossNext, .F.
  2360.         ENDIF
  2361.       ENDIF
  2362.  
  2363.     CASE nMess = KB_ENTER
  2364.       IF nDlgDef > 0
  2365.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  2366.       ENDIF
  2367.  
  2368.     OTHERWISE
  2369.       DO CkWaitAc
  2370.       IF nAccel > 0
  2371.         IF nAccel = nCurrent
  2372.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2373.         ELSE
  2374.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2375.           DO GetNext WITH nAccel, .F.
  2376.         ENDIF
  2377.       ENDIF
  2378.  
  2379.   ENDCASE
  2380.  
  2381. RETURN
  2382. *-- EOP: DispCk
  2383.  
  2384.  
  2385. PROCEDURE DispBt
  2386. *----------------------------------------------------------------------------
  2387. * NAME
  2388. *   DispBt -
  2389. *
  2390. * DESCRIPTION
  2391. *
  2392. *----------------------------------------------------------------------------
  2393.   PRIVATE nPossNext
  2394.   DO CASE
  2395.     CASE nMess = KB_TAB
  2396.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2397.       DO GetNext WITH .T.
  2398.     CASE nMess = KB_SHIFTTAB
  2399.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2400.       DO GetNext WITH .F.
  2401.     CASE nMess = KB_ENTER
  2402.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2403.     CASE nMess = KB_MOUSE
  2404.       nPossNext = GetMsTo()
  2405.       IF nPossNext > 0
  2406.         IF nPossNext = nCurrent
  2407.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2408.         ELSE
  2409.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2410.           DO GetNext WITH nPossNext, .F.
  2411.         ENDIF
  2412.       ENDIF
  2413.     OTHERWISE
  2414.       DO CkWaitAc
  2415.       IF nAccel > 0
  2416.         IF nAccel = nCurrent
  2417.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2418.         ELSE
  2419.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2420.           DO GetNext WITH nAccel, .F.
  2421.         ENDIF
  2422.       ENDIF
  2423.   ENDCASE
  2424.  
  2425. RETURN
  2426. *-- EOP: DispBt
  2427.  
  2428.  
  2429. PROCEDURE DispCD
  2430. *----------------------------------------------------------------------------
  2431. * NAME
  2432. *   DispCD -
  2433. *
  2434. * DESCRIPTION
  2435. *
  2436. *----------------------------------------------------------------------------
  2437.  
  2438.   DO CASE
  2439.     CASE nMess = KB_TAB
  2440.       DO GetNext WITH .T.
  2441.     CASE nMess = KB_SHIFTTAB
  2442.       DO GetNext WITH .F.
  2443.     CASE nMess = KB_MOUSE
  2444.       nPossNext = GetMsTo()
  2445.       IF nPossNext = nCurrent
  2446.         nMess = KB_UPARROW
  2447.         DO DispCD                       && Make a recursive call
  2448.       ELSE
  2449.         IF nPossNext > 0
  2450.           DO GetNext WITH nPossNext
  2451.         ENDIF
  2452.       ENDIF
  2453.  
  2454.     CASE nMess = KB_CTRLW .AND. nAccel > 0
  2455.       DO GetNext WITH nAccel
  2456.  
  2457.     CASE nMess = KB_ENTER
  2458.       IF nDlgDef > 0
  2459.         DO GetNext WITH nDlgDef
  2460.         IF nCurrent = nDlgDef
  2461.           DO TButton WITH BN_CLICKED, .F., nDlgDef
  2462.         ENDIF
  2463.       ENDIF
  2464.  
  2465.     CASE nMess = KB_DOWNARROW .OR. ;
  2466.          nMess = KB_UPARROW
  2467.  
  2468.       DO TCombo WITH CBN_DROPDOW, .F., nCurrent
  2469.  
  2470.       *-----------------------------------------------
  2471.       *-- GENCODE - Do VALID code here from Memo field
  2472.       *-----------------------------------------------
  2473.       DO CASE
  2474.         CASE nCurrent = 9                && CD_FILE_1
  2475.             IF BDCFill( [CD_FILE_1] )                                           
  2476.             ENDIF
  2477.       ENDCASE
  2478.       IF nMsEvent = KB_MOUSE
  2479.         nPossNext = GetMsTo()
  2480.         IF nPossNext > 0
  2481.           IF nPossNext <> nCurrent
  2482.             *-- User clicked to another field
  2483.             DO GetNext WITH nPossNext
  2484.           ENDIF
  2485.         ENDIF
  2486.       ELSE
  2487.         DO CASE
  2488.           CASE nMess = KB_TAB
  2489.             DO GetNext WITH .T.
  2490.           CASE nMess = KB_SHIFTTAB
  2491.             DO GetNext WITH .F.
  2492.           CASE nAccel > 0
  2493.             DO GetNext WITH nAccel
  2494.         ENDCASE
  2495.       ENDIF
  2496.  
  2497.     OTHERWISE
  2498.       DO CkWaitAc
  2499.       IF nAccel > 0
  2500.         IF nAccel <> nCurrent
  2501.           DO GetNext WITH nAccel
  2502.         ENDIF
  2503.       ENDIF
  2504.  
  2505.   ENDCASE
  2506.  
  2507. RETURN
  2508. *-- EOP: DispCD
  2509.  
  2510.  
  2511. PROCEDURE GetNext
  2512. PARAMETERS p__dir, pl_SameGrp
  2513. *----------------------------------------------------------------------------
  2514. * NAME
  2515. *   GetNext -
  2516. *
  2517. * DESCRIPTION
  2518. *
  2519. * PARAMETERS
  2520. *   p__dir     = .T. to go forward, .F. to go back, number to go to
  2521. *                record number.
  2522. *   pl_SameGrp = .F. to go to first item in next/prev group, .T. will
  2523. *                go to the next/prev item within the same group.  Only
  2524. *                applies to p__dir being next/previous.
  2525. *
  2526. *----------------------------------------------------------------------------
  2527.   PRIVATE cPrevClass, nWay, npCurrent, nPointer, nNextObj, nNextPtr
  2528.   PRIVATE nRecNo, npRecNo, lExit, cField, cVar, cCurrClass
  2529.   *--------------------------------------------------------------
  2530.   *-- Check for OK conditions, unless its a direct move to cancel
  2531.   *--------------------------------------------------------------
  2532.   IF ( TYPE( 'p__dir' ) = "N" .AND. p__dir <> nCancelBt ) .OR. ;
  2533.      TYPE( 'p__dir' ) = "L"
  2534.     DO CASE
  2535.       CASE nCurrent = 9                  && CD_FILE_1
  2536.         IF .NOT. BDCFill( [CD_FILE_1] )
  2537.            RETURN
  2538.         ENDIF
  2539.     ENDCASE
  2540.   ENDIF
  2541.  
  2542.  
  2543.   *------------------------------------------
  2544.   *-- Check for move out of the current group
  2545.   *------------------------------------------
  2546.   IF .NOT. pl_SameGrp
  2547.     IF TYPE( "p__dir" ) = "L"
  2548.       DO HasTitle WITH nCurrent, BN_UNHILITE
  2549.     ENDIF
  2550.   ENDIF
  2551.  
  2552.   cPrevClass = LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 )
  2553.  
  2554.  
  2555.   *--------------------------------------------------
  2556.   *-- Set the current CK or RB pointer before leaving
  2557.   *--------------------------------------------------
  2558.   DO CASE
  2559.     CASE nCurrent = 20                   && RB_MODE_1
  2560.       STORE nCurrent TO nRB_MODE
  2561.     CASE nCurrent = 24                   && RB_MODE_2
  2562.       STORE nCurrent TO nRB_MODE
  2563.     CASE nCurrent = 21                   && CK_OPTI_1
  2564.       STORE nCurrent TO nCK_OPTI
  2565.     CASE nCurrent = 25                   && CK_OPTI_2
  2566.       STORE nCurrent TO nCK_OPTI
  2567.     CASE nCurrent = 28                   && CK_OPTI_3
  2568.       STORE nCurrent TO nCK_OPTI
  2569.     CASE nCurrent = 31                   && CK_OPTI_4
  2570.       STORE nCurrent TO nCK_OPTI
  2571.   ENDCASE
  2572.  
  2573.   *----------------------------------------
  2574.   *-- Handle the forward and backward moves
  2575.   *----------------------------------------
  2576.   IF TYPE( "p__dir" ) = "L"
  2577.     DO CASE
  2578.       *-------------------------------------------
  2579.       *-- Go forward or backward in the same group
  2580.       *-------------------------------------------
  2581.       CASE  pl_SameGrp
  2582.         nWay = IIF( p__dir, 10, 9 )  && 10 Forward, 9 Back
  2583.         npCurrent = aObjPoint[ nCurrent ]
  2584.         nPointer = npCurrent
  2585.         *-----------------------------------------------
  2586.         *-- Is this a one item radio button or check box
  2587.         *-----------------------------------------------
  2588.         IF aClkObj[ npCurrent, 4 ] <> aClkObj[ npCurrent, nWay ]
  2589.           DO WHILE .T.
  2590.             *------------------------------------------------------
  2591.             *-- Check to see if the next object's WHEN clause is Ok
  2592.             *------------------------------------------------------
  2593.             nNextObj = aClkObj[ nPointer, nWay ]
  2594.             IF WhenOk( nNextObj )
  2595.               nPointer = aObjPoint[ nNextObj ]
  2596.               EXIT
  2597.             ELSE
  2598.               *-----------------------------------------------
  2599.               *-- See if we looped back to the item we were on
  2600.               *-----------------------------------------------
  2601.               nNextPtr  = aObjPoint[ nNextObj ]
  2602.               IF nNextPtr = npCurrent
  2603.                 EXIT
  2604.               ELSE
  2605.                 nPointer = nNextPtr
  2606.               ENDIF
  2607.             ENDIF
  2608.           ENDDO
  2609.         ENDIF
  2610.         IF nPointer <> npCurrent
  2611.           nCurrent = aClkObj[ nPointer, 4 ]
  2612.           nCurrGrp = aClkObj[ nPointer, 5 ]
  2613.         ENDIF
  2614.       OTHERWISE
  2615.         nWay = IIF( p__dir, 6, 7 )  && 6 Forward, 7 Back
  2616.         nRecNo = nCurrent
  2617.         npRecNo = aObjPoint[ nRecNo ]
  2618.         lExit = .F.
  2619.         DO WHILE aClkObj[ npRecNo, 5 ] = nCurrGrp
  2620.           nRecNo = aClkObj[ npRecNo, nWay ]
  2621.           npRecNo = aObjPoint[ nRecNo ]
  2622.           IF aClkObj[ npRecNo, 5 ] = nCurrGrp
  2623.             LOOP
  2624.           ELSE
  2625.             *--------------------------------------------------
  2626.             *-- Finally, we have moved out of the current group
  2627.             *--------------------------------------------------
  2628.             nCurrGrp = aClkObj[ npRecNo, 5 ]
  2629.             IF .NOT. WhenOk( nRecNo )
  2630.               LOOP
  2631.             ELSE
  2632.               nCurrent = nRecNo
  2633.               lExit = .T.
  2634.             ENDIF
  2635.           ENDIF
  2636.  
  2637.           *---------------------------------------------------------
  2638.           *-- Was this a move into a radio button or check box group
  2639.           *---------------------------------------------------------
  2640.           cField = aClkObj[ npRecNo, 11 ]
  2641.           cVar   = "N" + LEFT( cField, RAT( "_", cField ) - 1 )
  2642.           DO CASE
  2643.             CASE cVar = "NRB_MODE"
  2644.               nRecNo = NRB_MODE
  2645.               npRecNo = aObjPoint[ nRecNo ]
  2646.               nCurrent = nRecNo
  2647.               nCurrGrp = aClkObj[ npRecNo, 5 ]
  2648.             CASE cVar = "NCK_OPTI"
  2649.               nRecNo = NCK_OPTI
  2650.               npRecNo = aObjPoint[ nRecNo ]
  2651.               nCurrent = nRecNo
  2652.               nCurrGrp = aClkObj[ npRecNo, 5 ]
  2653.           ENDCASE
  2654.           IF lExit
  2655.             EXIT
  2656.           ENDIF
  2657.         ENDDO
  2658.  
  2659.         DO HasTitle WITH nCurrent, BN_HILITE
  2660.  
  2661.     ENDCASE
  2662.  
  2663.   ELSE
  2664.  
  2665.     *-------------------------------------------------------
  2666.     *-- Handle direct moves to objects via Alt key and Mouse
  2667.     *-------------------------------------------------------
  2668.     IF .NOT. WhenOk( p__dir )
  2669.       nMess = 0
  2670.       RETURN
  2671.     ENDIF
  2672.  
  2673.     *--------------------------------------------------------------
  2674.     *-- Check to see if we are leaving or going into a radio button
  2675.     *-- group.  If so, we may have to toggle off the current dot.
  2676.     *--------------------------------------------------------------
  2677.     DO CASE
  2678.       *-----------------------------------------------------------
  2679.       *-- If the current object is a radio button and the group to
  2680.       *-- move into is the same, then...
  2681.       *-----------------------------------------------------------
  2682.       CASE LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 ) = "RB_" .AND. ;
  2683.            aClkObj[ aObjPoint[ p__dir ], 5 ] = nCurrGrp
  2684.  
  2685.         DO CASE
  2686.           CASE nCurrent = 20
  2687.             STORE .F. TO RB_MODE_1
  2688.             DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2689.           CASE nCurrent = 24
  2690.             STORE .F. TO RB_MODE_2
  2691.             DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2692.         ENDCASE
  2693.  
  2694.       *---------------------------------------------
  2695.       *-- If we are moving into a radio button group
  2696.       *---------------------------------------------
  2697.       CASE LEFT( aClkObj[ aObjPoint[ p__dir ], 11 ], 3 ) = "RB_"
  2698.         DO CASE
  2699.           CASE p__dir = 20
  2700.             IF p__dir <> nRB_MODE
  2701.               cField = aClkObj[ aObjPoint[ nRB_MODE ], 11 ]
  2702.               STORE .F. TO &cField
  2703.               DO TButton WITH WM_PAINT, BN_UNHILITE, nRB_MODE
  2704.             ENDIF
  2705.           CASE p__dir = 24
  2706.             IF p__dir <> nRB_MODE
  2707.               cField = aClkObj[ aObjPoint[ nRB_MODE ], 11 ]
  2708.               STORE .F. TO &cField
  2709.               DO TButton WITH WM_PAINT, BN_UNHILITE, nRB_MODE
  2710.             ENDIF
  2711.         ENDCASE
  2712.  
  2713.     ENDCASE
  2714.  
  2715.  
  2716.     IF nCurrGrp <> aClkObj[ aObjPoint[ p__dir ], 5 ]
  2717.       DO HasTitle WITH nCurrent, BN_UNHILITE
  2718.       DO HasTitle WITH p__dir, BN_HILITE
  2719.       nCurrent = p__dir
  2720.       nCurrGrp = aClkObj[ aObjPoint[ nCurrent ], 5 ]
  2721.       DO CASE
  2722.         CASE nCurrent = 11
  2723.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2724.         CASE nCurrent = 39
  2725.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2726.         CASE nCurrent = 48
  2727.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2728.         CASE nCurrent = 49
  2729.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2730.         CASE nCurrent = 50
  2731.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2732.         CASE nCurrent = 51
  2733.           DO TButton WITH BN_CLICKED, .F., nCurrent
  2734.       ENDCASE
  2735.     ELSE
  2736.       DO HasTitle WITH p__dir, BN_HILITE
  2737.     ENDIF
  2738.     nCurrent = p__dir
  2739.     nCurrGrp = aClkObj[ aObjPoint[ nCurrent ], 5 ]
  2740.  
  2741.   ENDIF
  2742.  
  2743.   *---------------------------------------------------------------
  2744.   *-- Repaint the Default button if we were on a button before and
  2745.   *-- the target is not a button.
  2746.   *---------------------------------------------------------------
  2747.   cCurrClass = LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 )
  2748.   IF cPrevClass = "BT_" .AND. cCurrClass <> "BT_"
  2749.     DO TButton WITH WM_PAINT, BN_DEFAULT, nDlgDef
  2750.     STORE .T. TO BT_OK
  2751.   ENDIF
  2752.  
  2753.   *---------------------------------------------------------
  2754.   *-- Save the current CK or RB pointer for the target group
  2755.   *---------------------------------------------------------
  2756.   DO CASE
  2757.     CASE nCurrent = 11                   && BT_EDITCF
  2758.       STORE nCurrent TO nBT
  2759.       IF TYPE( "p__dir" ) = "N"
  2760.         STORE .T. TO BT_EDITCF
  2761.       ENDIF
  2762.     CASE nCurrent = 20                   && RB_MODE_1
  2763.       STORE nCurrent TO nRB_MODE
  2764.       IF TYPE( "p__dir" ) = "N"
  2765.         STORE .F. TO RB_MODE_1
  2766.         DO TButton WITH BN_CLICKED, .F., nCurrent
  2767.       ENDIF
  2768.     CASE nCurrent = 24                   && RB_MODE_2
  2769.       STORE nCurrent TO nRB_MODE
  2770.       IF TYPE( "p__dir" ) = "N"
  2771.         STORE .F. TO RB_MODE_2
  2772.         DO TButton WITH BN_CLICKED, .F., nCurrent
  2773.       ENDIF
  2774.     CASE nCurrent = 21                   && CK_OPTI_1
  2775.       STORE nCurrent TO nCK_OPTI
  2776.       IF TYPE( "p__dir" ) = "N"
  2777.         DO TButton WITH BN_CLICKED, .F., nCurrent
  2778.       ENDIF
  2779.     CASE nCurrent = 25                   && CK_OPTI_2
  2780.       STORE nCurrent TO nCK_OPTI
  2781.       IF TYPE( "p__dir" ) = "N"
  2782.         DO TButton WITH BN_CLICKED, .F., nCurrent
  2783.       ENDIF
  2784.     CASE nCurrent = 28                   && CK_OPTI_3
  2785.       STORE nCurrent TO nCK_OPTI
  2786.       IF TYPE( "p__dir" ) = "N"
  2787.         DO TButton WITH BN_CLICKED, .F., nCurrent
  2788.       ENDIF
  2789.     CASE nCurrent = 31                   && CK_OPTI_4
  2790.       STORE nCurrent TO nCK_OPTI
  2791.       IF TYPE( "p__dir" ) = "N"
  2792.         DO TButton WITH BN_CLICKED, .F., nCurrent
  2793.       ENDIF
  2794.     CASE nCurrent = 39                   && BT_EDIT
  2795.       STORE nCurrent TO nBT
  2796.       IF TYPE( "p__dir" ) = "N"
  2797.         STORE .T. TO BT_EDIT
  2798.       ENDIF
  2799.     CASE nCurrent = 48                   && BT_OK
  2800.       STORE nCurrent TO nBT
  2801.       IF TYPE( "p__dir" ) = "N"
  2802.         STORE .T. TO BT_OK
  2803.       ENDIF
  2804.     CASE nCurrent = 49                   && BT_CANCEL
  2805.       STORE nCurrent TO nBT
  2806.       IF TYPE( "p__dir" ) = "N"
  2807.         STORE .T. TO BT_CANCEL
  2808.       ENDIF
  2809.     CASE nCurrent = 50                   && BT_HELP
  2810.       STORE nCurrent TO nBT
  2811.       IF TYPE( "p__dir" ) = "N"
  2812.         STORE .T. TO BT_HELP
  2813.       ENDIF
  2814.     CASE nCurrent = 51                   && BT_LINK
  2815.       STORE nCurrent TO nBT
  2816.       IF TYPE( "p__dir" ) = "N"
  2817.         STORE .T. TO BT_LINK
  2818.       ENDIF
  2819.   ENDCASE
  2820.  
  2821. RETURN
  2822. *-- EOP: GetNext WITH p__dir, pl_SameGrp
  2823.  
  2824.  
  2825. FUNCTION WhenOk
  2826. PARAMETERS pnTarget
  2827. *----------------------------------------------------------------------------
  2828. * NAME
  2829. *   WhenOk - Validate the WHEN condition for a target object
  2830. *
  2831. * DESCRIPTION
  2832. *
  2833. * PARAMETERS
  2834. *   pnTarget   = Object ID to verify against
  2835. *
  2836. *----------------------------------------------------------------------------
  2837.   PRIVATE lWhenOk
  2838.   lWhenOk = .T.
  2839.  
  2840.   DO CASE
  2841.     CASE pnTarget = 11                   && BT_EDITCF
  2842.       IF .NOT. ( .NOT. ISBLANK( CD_FILE_1 ) .AND. .NOT. ( "*" $ CD_FILE_1 .OR. "?" $ CD_FILE_1 ) )
  2843.         lWhenOk = .F.
  2844.       ENDIF
  2845.     CASE pnTarget = 39                   && BT_EDIT
  2846.       IF .NOT. ( LEFT(CD_LIST_1,1)=[@] )
  2847.         lWhenOk = .F.
  2848.       ENDIF
  2849.   ENDCASE
  2850.  
  2851. RETURN lWhenOk
  2852. *-- EOF: WhenOk( pnTarget )
  2853.  
  2854.  
  2855. FUNCTION GetId
  2856. PARAMETERS pcVar
  2857. *----------------------------------------------------------------------------
  2858. * NAME
  2859. *   GetId() - Search for memvar name and return current_id
  2860. *----------------------------------------------------------------------------
  2861.   PRIVATE nId
  2862.   nId = 0
  2863.  
  2864.   DO CASE
  2865.     CASE pcVar = "CD_FILE_0"
  2866.       nId = 6
  2867.     CASE pcVar = "CD_FILE_1"
  2868.       nId = 9
  2869.     CASE pcVar = "BT_EDITCF"
  2870.       nId = 11
  2871.     CASE pcVar = "RB_MODE_0"
  2872.       nId = 16
  2873.     CASE pcVar = "CK_OPTI_0"
  2874.       nId = 17
  2875.     CASE pcVar = "RB_MODE_1"
  2876.       nId = 20
  2877.     CASE pcVar = "CK_OPTI_1"
  2878.       nId = 21
  2879.     CASE pcVar = "RB_MODE_2"
  2880.       nId = 24
  2881.     CASE pcVar = "CK_OPTI_2"
  2882.       nId = 25
  2883.     CASE pcVar = "CK_OPTI_3"
  2884.       nId = 28
  2885.     CASE pcVar = "CK_OPTI_4"
  2886.       nId = 31
  2887.     CASE pcVar = "CD_LIST_0"
  2888.       nId = 34
  2889.     CASE pcVar = "CD_LIST_1"
  2890.       nId = 37
  2891.     CASE pcVar = "BT_EDIT"
  2892.       nId = 39
  2893.     CASE pcVar = "BT_OK"
  2894.       nId = 48
  2895.     CASE pcVar = "BT_CANCEL"
  2896.       nId = 49
  2897.     CASE pcVar = "BT_HELP"
  2898.       nId = 50
  2899.     CASE pcVar = "BT_LINK"
  2900.       nId = 51
  2901.   ENDCASE
  2902.  
  2903. RETURN( nId )
  2904. *-- EOF: GetId( pcVar)
  2905.  
  2906.  
  2907. PROCEDURE PostVals
  2908. *----------------------------------------------------------------------------
  2909. * NAME
  2910. *   PostVals -
  2911. *
  2912. * DESCRIPTION
  2913. *
  2914. *----------------------------------------------------------------------------
  2915.  
  2916.   IF TYPE( "BDCOPT[1]" ) <> "U"
  2917.  
  2918.     BDCOPT[ 1 ] = CD_FILE_1
  2919.     BDCOPT[ 2 ] = BT_EDITCF
  2920.     BDCOPT[ 3 ] = RB_MODE_1
  2921.     BDCOPT[ 4 ] = RB_MODE_2
  2922.     BDCOPT[ 5 ] = CK_OPTI_1
  2923.     BDCOPT[ 6 ] = CK_OPTI_2
  2924.     BDCOPT[ 7 ] = CK_OPTI_3
  2925.     BDCOPT[ 8 ] = CK_OPTI_4
  2926.     BDCOPT[ 9 ] = CD_LIST_1
  2927.     BDCOPT[ 10 ] = BT_EDIT
  2928.     BDCOPT[ 11 ] = BT_OK
  2929.     BDCOPT[ 12 ] = BT_CANCEL
  2930.     BDCOPT[ 13 ] = BT_HELP
  2931.     BDCOPT[ 14 ] = BT_LINK
  2932.  
  2933.   ENDIF
  2934.  
  2935. RETURN
  2936. *-- EOP: PostVals
  2937.  
  2938. PROCEDURE ReleObjs
  2939. *----------------------------------------------------------------------------
  2940. * NAME
  2941. *   ReleObjs - Scan the design DBF file and release the object variables
  2942. *
  2943. * DESCRIPTION
  2944. *
  2945. *----------------------------------------------------------------------------
  2946.   RELEASE POPUP CD_FILE_1
  2947.   RELEASE POPUP CD_LIST_1
  2948.  
  2949. RETURN
  2950. *-- EOP: ReleObjs
  2951.  
  2952.  
  2953. PROCEDURE IBDCOPT
  2954. *----------------------------------------------------------------------------
  2955. * NAME
  2956. *   IBDCOPT  - Builds the Initialization array for this dialog box
  2957. *
  2958. * DESCRIPTION
  2959. *   IBDCOPT with create a routine that you can call or cut from this
  2960. *   file to run a dialog box and capture the data on exit.
  2961. *
  2962. *   To run the dialog box,
  2963. *     SET PROCEDURE TO BDCOPT
  2964. *     DO IBDCOPT
  2965. *   Running IBDCOPT with use the defaults from the SCR file.  The
  2966. *   array will remain in memory after execution.
  2967. *
  2968. *   REMEMBER, REGENERATING THE DIALOG BOX WILL OVERWRITE THIS PROCEDURE!
  2969. *
  2970. *----------------------------------------------------------------------------
  2971.  
  2972.   PUBLIC ARRAY BDCOPT[ 14 ]
  2973.     *-- CD_FILE_1 - XXXXXXXXXXXXX [v]
  2974.     BDCOPT[ 1 ]      = [*.CFG] + SPACE( 75 )
  2975.  
  2976.     *-- BT_EDITCF -  E~dit config file
  2977.     BDCOPT[ 2 ]      = .F.
  2978.  
  2979.     *-- RB_MODE_1 - ( ) ~Compact
  2980.     BDCOPT[ 3 ]      = .T.
  2981.  
  2982.     *-- RB_MODE_2 - ( ) ~Standalone
  2983.     BDCOPT[ 4 ]      = .F.
  2984.  
  2985.     *-- CK_OPTI_1 - [ ] Compile ~only
  2986.     BDCOPT[ 5 ]      = .F.
  2987.  
  2988.     *-- CK_OPTI_2 - [ ] Dis~play offending code
  2989.     BDCOPT[ 6 ]      = .T.
  2990.  
  2991.     *-- CK_OPTI_3 - [ ] ~No warning messages
  2992.     BDCOPT[ 7 ]      = .T.
  2993.  
  2994.     *-- CK_OPTI_4 - [ ] Set Lang~Tables on
  2995.     BDCOPT[ 8 ]      = .F.
  2996.  
  2997.     *-- CD_LIST_1 - XXXXXXXXXXXXX [v]
  2998.     BDCOPT[ 9 ]      = [*.PRG] + SPACE( 75 )
  2999.  
  3000.     *-- BT_EDIT -  ~Edit file list
  3001.     BDCOPT[ 10 ]     = .F.
  3002.  
  3003.     *-- BT_OK -    Ok
  3004.     BDCOPT[ 11 ]     = .T.
  3005.  
  3006.     *-- BT_CANCEL -  Cancel
  3007.     BDCOPT[ 12 ]     = .F.
  3008.  
  3009.     *-- BT_HELP -   Help
  3010.     BDCOPT[ 13 ]     = .F.
  3011.  
  3012.     *-- BT_LINK -  ~Link options ...
  3013.     BDCOPT[ 14 ]     = .F.
  3014.  
  3015.   *--------------------------------------------------------------
  3016.   *-- FXL_Cancel is set to .T. is the user Cancels the dialog box
  3017.   *--------------------------------------------------------------
  3018.   FXL_Cancel = .F.
  3019.  
  3020.   *--------------------------------------------------------------
  3021.   *-- FXL_NoChng lets the dialog box know that the values in the
  3022.   *-- array are not different from the SCR file defaults.  This
  3023.   *-- will allow the dialog box to use the .WIN file for a faster
  3024.   *-- startup.
  3025.   *--------------------------------------------------------------
  3026.   FXL_NoChng = .T.
  3027.  
  3028.   DO BDCOPT
  3029.  
  3030.   IF .NOT. FXL_Cancel                   && The user clicked on OK
  3031.  
  3032.     *-----------------------------------
  3033.     *-- Put your Ok processing code here
  3034.     *-----------------------------------
  3035.  
  3036.   ENDIF
  3037.  
  3038.   RELEASE BDCOPT
  3039.  
  3040. RETURN
  3041. *-- EOP: IBDCOPT
  3042.